49 Commits

Author SHA1 Message Date
Marcos Paulo cac0276c51 chore(release): 0.7.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:41:38 -03:00
Marcos Paulo c5bd4c650d fix(ui): Enter, Escape and clicking away end a rename again
The project, library asset and version rename fields asked for focus every
frame before checking `lost_focus()`. In egui 0.36 `lost_focus()` reads the
focus as it is at the call, so taking it back first hid Enter, Escape and a
click elsewhere: the field could not be left. Focus is now taken back only
while the edit goes on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:12:05 -03:00
Marcos Paulo 1b795fa971 feat: 0.7.0 chat images, web research, image generation, plugins, fewer tokens
Images: paste from the clipboard into the chat, thumbnails and a lightbox for
what is sent, image-only messages, attachments sent at 1568px with the
original kept for zoom_image.

Brief and finish: ask_user question cards (swatches, reference tiles, the
recommended answer), chat rules for a brief, design system first, density,
short reports and next steps.

Research: the composer's Web chip, fetch_reference_images (public addresses
only; icons, logos and backdrops dropped), a References gallery, and a Haiku
researcher sub-agent on Claude Code.

Image generation (opt-in): Codex, Google Flow (gf) or a custom command.

Plugins page: Avataaars, DiceBear, Iconify, Lorem Picsum, Flags and QR codes
through <x-plugin>; SVG import draws masked groups as images.

Tokens: lean Claude Code sessions, deferred tool schemas and context editing
on the API, a fresh session with a recap past 120k or on demand, per-turn and
chat totals, a 1M context meter, a turn budget, model and effort pickers.

Also: page switcher in Chat, no flicker while steps run, desktop target size
in lint, the installer keeps papercraft-mcp current.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 19:04:55 -03:00
Marcos Paulo 4a8bd9a35b docs(skills): lessons from the Interview redesign: online-only CLI, one call at a time, multi-agent sections, cross-page instances, annotation checks, QA pitfalls
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:08:37 -03:00
Marcos Paulo 4a527dc70b docs(specs): interview cleanup and redesign reports, chat-canvas spec, annotation fixes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:54:59 -03:00
Marcos Paulo 97717beb6d docs: chat canvas tools, annotations, agent tools, cross-page components
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:54:58 -03:00
Marcos Paulo 872b693373 feat: lazy page loading, annotation layout, chat canvas tools
- Lazy project loading: the page in view first, the rest in the background;
  fix the endless repaint and memoise layer heights.
- Annotations: placement off screens, straight routing inside the target's
  screen, zoom-stable lines, badges below 60% zoom, Tidy, custom templates
  (upsert/delete_annotation_template).
- Chat: design-system digest each turn, Actions menu on a selection (fix lint,
  bind to tokens, use components, rename layers, agent prompts), Pick / area
  chips with crops, ⌥-click, ⌘K Ask, live agent outlines and counts, one run
  per MCP client with per-run revert, Stop shown as Stopped.
- MCP: set_viewport, viewport in get_basic_info/get_selection, screenshots
  with annotations, find_nodes substring search, get_tree_summary fullText,
  annotate tidy returns tidied count, not-an-instance lint.
- Fixes: write_html links cross-page components instead of copying them;
  instance roots keep their own layout when synced or swapped; CLI saves
  screenshots itself (the app writing to a removable volume froze it behind a
  macOS prompt), offline write lock, version check, --online.
- tools/install-local.sh installs the CLI and signs with a stable identity
  when present; Dockerfile adds the D-Bus packages the relay needs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:54:55 -03:00
Marcos Paulo dcecdc31b5 docs: 0.6.1 checked on native x86_64 Linux with an RTX 3090
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:07:14 -03:00
Marcos Paulo 3212e3f754 docs: 0.6.1 live UI pass with the screen unlocked
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:03:21 -03:00
Marcos Paulo d6695de462 docs: 0.6.1 Linux text check on native arm64 (clean)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 00:51:51 -03:00
Marcos Paulo c75efc3e7b docs: 0.6.1 Linux GUI check under Xvfb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:33:01 -03:00
Marcos Paulo 58ad0de0db docs: 0.6.1 live-app check screenshots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 09:29:04 -03:00
Marcos Paulo 238249309f chore: release 0.6.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 05:37:26 -03:00
Marcos Paulo 35dc8aed8f docs: agents and annotations guides, specs, mock-ups, 0.6.1 checks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 05:37:20 -03:00
Marcos Paulo 73353dd4ca feat: any agent via ACP, annotations with templates, chat fixes
Chat: agents are found on the login-shell PATH, so apps launched from
the Dock see claude, codex and Homebrew CLIs. A generic Agent Client
Protocol backend runs OpenCode, Gemini CLI, Cursor, Pi (pi-acp) and
others from a data registry, plus custom agents; papercraft tools are
auto-approved only when announced and not destructive. New agent panel
and Settings > Chat layout, sign-in card, several @ selections, no
install instructions. Fixes Send silently doing nothing when the CLI
path was set in Settings.

Annotations: numbered notes with leader lines that explain a design.
Categories drive the look; templates (project default, per-page) choose
which kinds are used. Annotate tool (N), side view, Customize, inspector
section, Annotate with AI, view modes (Cmd+Shift+A). MCP: annotate
(batched), get/update/delete, get/set_annotation_template; notes appear
in get_design_spec and get_jsx and in agent-run review and revert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 05:37:20 -03:00
Marcos Paulo 33a0e265b8 chore: release 0.6.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 22:43:18 -03:00
Marcos Paulo 45f197250b docs: Chat mode guide, spec, mock-ups and end-to-end screenshots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 22:43:11 -03:00
Marcos Paulo 13bc2d582e feat: Chat mode with Claude Code, Codex and generic API endpoints
A Design | Chat layout (Cmd+J): a chat column next to the live canvas.
Agents run through PaperCraft's own tools, so agent runs, undo, review
and revert work as for any MCP client. The thread shows streamed text,
reasoning, tool cards grouped into steps, the agent's plan, approvals
for destructive tools, checkpoints with Restore to here, run cards and
usage. Chats are saved in the project under chats/.

Backends: Claude Code (claude -p stream-json) and Codex (codex exec
--json) with the app's MCP server, using their own logins; or any API
endpoint in Anthropic Messages or OpenAI Chat Completions format with a
key kept in the OS keychain. Settings > Chat configures them.

Also: the offline CLI no longer saves a camera fitted to a fake window,
and top-level shapes without a position go to the next free spot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 22:43:11 -03:00
Marcos Paulo 92c63b0a46 chore: release 0.5.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:47:43 -03:00
Marcos Paulo dcbc213d1f docs: README, design-system and agent docs, specs, skills for 0.5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:47:24 -03:00
Marcos Paulo 30dba88e1c feat: variable collections, shared libraries, assets and offline CLI
Variables move to a project-level design.json: collections with their
own modes, slash groups, color/number/string/boolean types and aliases.
Pages keep a derived cache, every writer goes through one path, and a
change reaches every page in one undo step per page. Strokes, text
color, size, gap, padding, radius, font size, line height, opacity and
visibility can bind to variables. Projects migrate to version 2.

Components work across pages, and any file can publish itself as a
library that other files enable, update after review, or disable.

New Variables and Libraries modals, an Assets view grouped by name
prefix, variable pickers in the inspector, and a slimmer Design tab.

papercraft-cli runs tools in-process when the app is closed, with a
`shell` command for interactive sessions and scripts.

Also centres the sidebar footer and title bar text on their icons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 17:47:23 -03:00
Marcos Paulo 6c553bd7ad chore: release 0.4.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:42:20 -03:00
Marcos Paulo 5c3f7c6382 chore: regenerate milestone screenshots
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:40:43 -03:00
Marcos Paulo 45639ca997 docs: agent runs spec, tasks, roadmap and agent docs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:40:43 -03:00
Marcos Paulo ab6173a404 feat: agent runs with auto-versions, review and revert
Group an agent's editing calls into runs. Each page is saved as an auto
version before the run first touches it. The Agent view lists runs and
opens a review (id-paired diff, grouped by frame) with per-change undo,
Revert run and Accept all. The canvas outlines added, changed and
removed layers during review, and a toast announces a finished run.
Runs persist under runs/ and are pruned to the newest 50.

Also fixes version restore dropping variable, mode and token changes,
and stops lint_design advertising readOnlyHint (fix: true edits).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:40:43 -03:00
Marcos Paulo 7e325de1dd docs: handoff for the PaperCraft redesign work
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 09:45:19 -03:00
Marcos Paulo 3f8ef2c4ca docs: why Linux keeps the system window frame
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 01:06:00 -03:00
Marcos Paulo a760abda42 feat: icons in every context menu (pages, library, versions, variables, agent link, trash)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 01:02:19 -03:00
Marcos Paulo 4000960811 feat: icons in the home card menu
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:56:06 -03:00
Marcos Paulo 02bd90c601 feat: Present mode glides between frames; Share menu gets icons
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:55:07 -03:00
Marcos Paulo 90cbde7262 test: interface scale applies and the UI still draws
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:48:05 -03:00
Marcos Paulo 6c6b7c91a7 docs: shared-libs plan, feature ideas, compact workflow; palette UI scale
- docs/shared-libs.md: what PaperCraft and NotesCraft carry twice and the order to move it into craft-libs.
- docs/feature-ideas.md: ranked ideas, done and next.
- skills/papercraft: references/compact-workflow.md (pages and groups, compressing, design-code sync, few tokens, shared work).
- Command palette: Interface scale entries.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:45:13 -03:00
Marcos Paulo cbe23ed6d1 feat: merge concurrent edits to a shared page, agent activity pill, UI scale
Shared projects: when both a folder and the relay changed the same page since they
last agreed, the page is merged (objects by key, nodes by id, child lists as sets,
clashing new ids renumbered) against a base copy kept in .sync-base/, instead of
the last writer winning.

UI: animated "agent is working" pill and canvas glow, layer rows pop in, Settings
gets an interface scale, the toolbar dock stays inside the canvas, the duplicate
header gear is gone in the floating layout, the folded menu is one flat list,
Windows keeps rounded corners and the system shadow without a native frame.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:38:21 -03:00
Marcos Paulo 5e748b41d8 test: stopping a share detaches the folder and leaves the relay copy
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:20:32 -03:00
Marcos Paulo eda572dff4 feat: richer History/Comments/Agent views, export presets, web fixes
History: saved versions now work in the browser too (kept in the virtual
file system) and can be renamed. Comments: Open/Resolved/All filters, reopen
and delete. Agent: copy-agent-URL button, clear log, failed calls shown in
red; the browser build logs agent calls as well. The inspector's Export "+"
keeps export settings as one-click presets.

Web: the library probe no longer leaves Join shared / Share hidden after a
reload, the share dialog is a modal in the new style, the menu bar folds into
one "Menu" button when the canvas is narrow, the Updates page and empty-home
text no longer talk about native-only things. Verified in Chromium against
papercraft-relay: share, join by link, edits syncing both ways with the
native app.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 00:15:52 -03:00
Marcos Paulo ecf01733aa feat: remake the app UI from the PaperCraft redesign
Floating rounded panels, a shared component kit (buttons, chips, toggles,
selects, sliders), Lottie icon motion ported from NotesCraft, a remade home,
settings, command palette, confirm dialogs, updater, Present mode, and
History / Comments / Agent side views with saved versions.

Inspector gains Design/Prototype tabs, a drop-shadow Effects section and
prototype links that Present mode follows on click. Narrow windows keep the
canvas usable. Spec output (get_design_spec) now covers icons, svg, sizing
limits, tokens and component instances; adds a delete_pages tool.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 23:52:48 -03:00
Marcos Paulo 40d4bf3d6e docs: record the OpenDesign integration map and backlog
What OpenDesign ships, which parts are portable file formats and which are
Electron/Next.js-bound, what has landed here, and the ranked candidates for
the next slices (direction presets, craft rulebooks, question-form, pixel
diff wiring, plugin manifest reader).
2026-10-20 12:23:27 -03:00
Marcos Paulo 360f7a7d31 docs: add critique gate agent skill
Port the OpenDesign Critique Theater 5-panel contract into PaperCraft:
critic .4 / brand .2 / accessibility .2 / copy .2, designer weight 0,
composite threshold 8.0, max 3 rounds, ship_best fallback, and the
Shipped / Below threshold / Timed out / Interrupted / Degraded statuses.

lint_design and verify_code findings are hard evidence: an error caps the
owning panel at 3.9, a warning at 6.9, and the cap lifts once the finding
is gone. Contract inspired by nexu-io/open-design (Apache-2.0), written
against PaperCraft's own tools.
2026-10-20 12:23:27 -03:00
Marcos Paulo f580b29f4a feat: OpenDesign design-system package import/export
Import and export the OpenDesign design-system package format
(manifest.json + tokens.css + DESIGN.md, schema od-design-system-project/v1).

:root hex colors become variables, [data-theme="x"] blocks become modes and
every other value becomes a token. Two MCP tools: import_design_system
(project-wide, one undo step) and export_design_system (writes the three
files). New Tx::set_design_system keeps the replace in a single undo step and
moves or drops the fills that follow a variable.

Format reimplemented from the published description of nexu-io/open-design
(Apache-2.0); no upstream file copied, attribution in THIRD_PARTY.md.
Verified against the real bundled OpenDesign package: import -> export ->
re-import round-trips byte-stable.
2026-10-20 12:23:27 -03:00
Marcos Paulo 40dcc81ad2 chore: release 0.3.1 2026-10-17 20:01:04 -03:00
Marcos Paulo 5169fe6342 fix: resolve issues #1-#8 (side borders, align-self, min/max size, wavy/colored underline, cross-page layers, screenshot out path, feedback counts, nested component import) 2026-10-17 20:00:47 -03:00
Marcos Paulo fa0511bc94 chore: release 0.3.0 2026-10-17 18:45:33 -03:00
Marcos Paulo 3f37de39f8 feat: design system UI, grid/wrap layout, .fig import, frame diff, multi-target codegen, and AI design-to-code enforcer 2026-10-17 18:45:33 -03:00
Marcos Paulo edc0b818ff chore(deploy): roll out the library build
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 10:05:45 -03:00
Marcos Paulo ea6f1b3ac4 feat(relay): personal library mode, every project on every device
papercraft-relay --library lists every project in --data at /library and lets a
project be deleted (moved to .trash, kept on disk). A device that opens the site
joins the projects it lacks and shares its local ones, through the existing sync
loops. A deleted project answers 410 and lands in the other devices' trash; one the
server forgot (404 after it had synced) is kept locally and shared again, so losing
the server's disk never deletes anyone's work. Share controls are hidden in library
mode. Meant for a network-bounded, single-user deployment: there are no accounts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 09:55:34 -03:00
Marcos Paulo 5f667a5ae9 feat(deploy): container image and K3s manifest for the web build
Dockerfile builds the wasm bundle and papercraft-relay, which serves the app, the
agent relay and shared projects (--data on a PV). craft-libs is a private git
dependency, so the build takes host-vendored crates as a build context.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 09:39:05 -03:00
Marcos Paulo 0b78bb1d85 fix(render): sample image textures with explicit gradients so the canvas shader validates on WebGPU
WebGPU rejects textureSample under non-uniform control flow (the branch on the
per-fragment kind), which left the canvas pipeline invalid and made the first
editor frame fail with Queue.Submit: Invalid CommandBuffer. Take dpdx/dpdy before
the branch and use textureSampleGrad; mip selection is unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 09:39:04 -03:00
Marcos Paulo 110c99d47f feat: shared projects synced through the relay, from web and native
The relay (--data <dir>) stores shared projects under /p/{token}; every shared
project polls it and reconciles files through crate::vfs. Home screen gets
Share, Join shared, copy link and stop sharing.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 08:42:52 -03:00
Marcos Paulo b43fa4fe43 fix(relay): accept public Host headers; the URL token is the credential
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 08:42:52 -03:00
873 changed files with 65241 additions and 1884 deletions
+7
View File
@@ -0,0 +1,7 @@
target/
analysis/
.git/
.worktrees/
web/pkg/
dist/
packaging/
+1
View File
@@ -5,3 +5,4 @@ dist/
app.asar.unpacked/
web/pkg/
.worktrees/
.oc-agents/
Generated
+879 -8
View File
File diff suppressed because it is too large Load Diff
+11 -4
View File
@@ -1,6 +1,6 @@
[package]
name = "papercraft"
version = "0.2.0"
version = "0.7.1"
edition = "2024"
rust-version = "1.95"
description = "A native infinite-canvas app for planning, working and sketching"
@@ -34,6 +34,7 @@ lyon = "1"
ttf-parser = "0.25"
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["float_roundtrip"] }
semver = "1"
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"] }
pollster = "0.4"
web-time = "1"
@@ -47,6 +48,7 @@ craft-ui = { version = "0.1.0", git = "https://git.marcospaulo.dev.br/masi/craft
i_overlay = "9.0.1"
miniz_oxide = "0.9.1"
usvg = "0.48"
resvg = "0.48"
tokio = { version = "1", features = ["sync"] }
base64 = "0.23"
@@ -68,7 +70,6 @@ opt-level = "z"
opt-level = 2
[dev-dependencies]
resvg = "0.48"
rmcp = { version = "3.5.1", default-features = false, features = ["transport-child-process"] }
reqwest = { version = "0.13", default-features = false }
# The relay test drives a fake tab over a real WebSocket; same version axum's `ws` uses.
@@ -88,8 +89,14 @@ winit = "0.30"
arboard = { version = "3.6.1", features = ["image-data"] }
rmcp = { version = "3.5.1", default-features = false, features = ["server", "base64", "transport-streamable-http-server", "transport-io", "client", "transport-streamable-http-client-reqwest"] }
tokio = { version = "1", features = ["rt-multi-thread", "net", "sync", "macros", "time", "io-std", "fs"] }
axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "ws"] }
axum = { version = "0.8", default-features = false, features = ["http1", "tokio", "ws", "json", "query"] }
tokio-util = "0.7"
# Shared-project sync; the system TLS stack so https servers work without bundling one.
reqwest = { version = "0.13", default-features = false, features = ["native-tls"] }
# Anthropic API key in the OS keychain (chat API backend). Linux uses the Secret Service (persistent; keyutils is not).
# libc: SIGINT to the spawned chat CLIs.
keyring = { version = "3", default-features = false, features = ["apple-native", "windows-native", "sync-secret-service", "crypto-rust"] }
libc = "0.2"
# Browser build (`src/web.rs`): canvas + WebGPU/WebGL surface, DOM events instead of winit.
[target.'cfg(target_arch = "wasm32")'.dependencies]
@@ -99,4 +106,4 @@ wasm-bindgen-futures = "0.4"
js-sys = "0.3"
console_error_panic_hook = "0.1"
console_log = "1"
web-sys = { version = "0.3", features = ["Window", "Document", "Element", "HtmlElement", "HtmlCanvasElement", "KeyboardEvent", "PointerEvent", "WheelEvent", "ClipboardEvent", "DataTransfer", "MediaQueryList", "Location", "Performance", "Navigator", "Clipboard", "CssStyleDeclaration", "console", "WebSocket", "MessageEvent", "CloseEvent", "ErrorEvent", "Storage", "Crypto", "DragEvent", "FileList", "File", "Blob"] }
web-sys = { version = "0.3", features = ["Window", "Document", "Element", "HtmlElement", "HtmlCanvasElement", "KeyboardEvent", "PointerEvent", "WheelEvent", "ClipboardEvent", "DataTransfer", "MediaQueryList", "Location", "Performance", "Navigator", "Clipboard", "CssStyleDeclaration", "console", "WebSocket", "MessageEvent", "CloseEvent", "ErrorEvent", "Storage", "Crypto", "DragEvent", "FileList", "File", "Blob", "Request", "RequestInit", "Response"] }
+48
View File
@@ -0,0 +1,48 @@
# PaperCraft redesign: handoff
Last updated 2026-10-21. Branch `debrand`, pushed to `origin` (`masi/papercraft`). Latest commit when this was written: `3f8ef2c`.
## The goal
Port the PaperCraft redesign (the `PaperCraft` design file) into the egui app and remake all the UI. A Stop hook keeps judging that goal "not met"; the list below is what is actually left, so the next session does not have to re-derive it.
## What is done
* Design file `~/Documents/paper-rs/PaperCraft` (pages `Design System`, `Redesign`, `Redesign (from AI spec)`): built earlier. The dead "+" next to the Layer and Code & AI Handoff headings was removed from all three pages on 2026-10-21. Backup of the file before that edit: `/private/tmp/claude-501/pc-work/PaperCraft.backup` (temp, may be gone).
* App UI: floating rounded panels, shared component kit (`src/ui/kit.rs`), Lottie icon motion (`src/lottie`, `src/ui/lottie_icon.rs`, `src/ui/motion.rs`), home, trash, settings (theme, interface scale, animations), command palette, confirm modals, updater, Present mode (arrow keys, prototype links, camera glide between frames), History/Comments/Agent side views, inspector with Design/Prototype tabs, Effects (drop shadow), export presets, icons in the Share menu and every context menu.
* Agent feedback: animated "working" pill in the top bar and a pulsing ring around the canvas while an agent has called a tool in the last 6 seconds (`agent_pill`, `agent_glow` in `src/ui/mod.rs`).
* Sharing: file sync through the relay (`src/sync.rs`) now merges a page when both sides changed it (`src/merge.rs`, base copies in `.sync-base/`). Verified between two browser sessions and the native app against `papercraft-relay`.
* Web build: `sh web/build.sh`, serve with `papercraft-relay --static web --data <dir>`. Fixed the library probe hiding Share/Join after reload, the share dialog is a modal, the menu bar folds into one "Menu" when the canvas is under 1100px, saved versions work in the browser.
* Skills: `craft-skills/skills/papercraft` (new `references/compact-workflow.md`), `skills-papercraft/skills/*` (project layout, design-to-code pointers). Both repos pushed to `main`.
* Plans: `docs/shared-libs.md` (what to move into `craft-libs`), `docs/feature-ideas.md` (ranked ideas).
## What is not done, and why
1. **`/Applications/PaperCraft.app` is the older build.** The user has PaperCraft open for other work and said not to close it. `tools/install-local.sh` asks a running app to quit, so it was never run against `/Applications`. The final build is installed at `~/Applications/PaperCraft.app` (installed with `PAPERCRAFT_APP_PATH="$HOME/Applications/PaperCraft.app" bash tools/install-local.sh --no-launch`). To finish: the user closes PaperCraft, then `bash tools/install-local.sh`.
2. **Linux rounded corners:** not built. Needs a transparent surface, a paint callback that clears the four corners with replace blending, and `drag_resize_window` edge resizing; none can be tested without a Linux desktop. Reasoning is in `docs/feature-ideas.md` item 9. Windows is done (`with_corner_preference(Round)` and undecorated shadow, compile-checked only).
3. **History, Agent, Comments** show only the project's own data. Richer content needs backend features that do not exist (server-side history, an agent-activity feed, threaded comments with replies from people). See `docs/feature-ideas.md`.
4. **Layer and Code "+"**: the user chose to remove them from the design, so design and app match.
5. Smart transitions that animate matching layers between frames, layer blur, presence on shared projects, version compare: listed in `docs/feature-ideas.md`, not built.
6. **Shared libraries:** nothing moved. `docs/shared-libs.md` has the plan; it touches `craft-libs` and NotesCraft and needs the user's go-ahead.
## Rules the user set
* Never close, quit or reinstall over the user's running PaperCraft. Memory: `dont-close-users-papercraft`. Launch test builds with their own `PAPERCRAFT_HOME` and `PAPERCRAFT_MCP_PORT`, keep the PID from `$!`, kill only that PID. Never `pkill` by name.
* Commit and push only when asked (they have asked for pushes of this work). No `--no-verify`.
* Do not click macOS permission prompts for the user. Launching the app binary directly with `PAPERCRAFT_HOME` set to a temp folder avoids the Documents prompt.
* Caveman terse chat style; normal prose in files and commits.
## How to verify
* `cargo test --no-fail-fast`. `ten_thousand_elements_cache_and_pan_without_rework` (tests/perf.rs) is a timing test and fails when the machine is busy; run it alone.
* `cargo check --lib --target wasm32-unknown-unknown` and `cargo check --lib --target x86_64-pc-windows-msvc` for the other platforms.
* On screen: launch `target/debug/papercraft` (or the installed binary) with `PAPERCRAFT_HOME=<tmp> PAPERCRAFT_MCP_PORT=<free port>`, find its window with `osascript ... get {position, size} of window 1` for that PID, and use the helpers in `/private/tmp/claude-501/pc-work/` (`click`, `drag` Swift binaries; may be gone). Drive the app with `papercraft-cli` and `PAPERCRAFT_MCP_PORT`. Note `papercraft-cli call <tool> -` reads stdin; pass `'{}'` for no arguments.
* Browser: Playwright's Chromium (installed under `~/Library/Caches/ms-playwright`), script in `/private/tmp/claude-501/pc-work/pw/` (`lib.mjs` launches with `--use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist --enable-unsafe-webgpu`). The browser MCP tool's own Chrome link is broken.
## Gotchas
* egui tests need `out.textures_delta.clear()` after each frame.
* `cargo fmt` reformats the whole crate, including files with the user's uncommitted edits.
* The relay port 8787 may be taken by another local service; use `--listen 127.0.0.1:18787`.
* A `.share` file in a project folder marks it shared; `.sync-base/` holds merge bases and never syncs.
* Home cards open on double-click.
+50 -2
View File
@@ -1,6 +1,6 @@
# Progress
Last updated: 2026-10-11.
Last updated: 2026-10-24.
## Phase 3: local-first design and whiteboard tool
@@ -34,7 +34,7 @@ are credited in `THIRD_PARTY.md`.
to that page's own document and history (`Editor::with_page`) without switching the view.
* **Bridge** (`paper-rs-mcp`): rmcp stdio server that lists tools offline and relays calls to
the app over HTTP, reconnecting after app restarts.
* **Tools** (`src/mcp/tools.rs`): Paper's names and argument shapes where there is an
* **Tools** (`src/mcp/tools.rs`): 53 tools at the time (61 now), using Paper's names and argument shapes where there is an
equivalent (see README), plus `create_shape`, `select_nodes`, `undo`, `redo`.
`write_html` (`src/mcp/{html,css}.rs`, `exec.rs` `Builder`) maps flex/block layout onto auto
layout with CSS stretch semantics, text styles and rich-text runs, backgrounds, gradients,
@@ -76,6 +76,54 @@ are credited in `THIRD_PARTY.md`.
* **Not carried over**: comments, design tokens, AI image generation, video export, teams;
moving layers between pages; remote image URLs (see README Known gaps).
### 2026-10-24: 0.7.1 (rename fix)
* Enter, Escape and clicking away end a rename again (projects on the home screen, library assets, versions). The fields took focus back before checking whether they had lost it.
### 2026-10-24: 0.7.0 (images, research, plugins, fewer tokens)
* Images in chat: paste from the clipboard (Cmd/Ctrl+V with an image-only clipboard now reaches the composer), thumbnails in the composer and in sent messages, a lightbox, image-only messages. Attachments are sent at most 1568 px (originals kept); `zoom_image` reads a region of the original.
* Brief and finish: `ask_user` draws questions as a card of clickable answers (palette swatches, reference image tiles, the recommended answer marked). The chat rules ask for a brief before the first design, variables and components first, sizes from the agreed density, a short report and next steps as a card.
* Web research (the composer's Web chip): `fetch_reference_images` (public addresses only, icons, logos and backdrops dropped, social cards last), a References gallery that dims what the agent did not keep; on Claude Code a Haiku `researcher` sub-agent does the searching.
* Image generation, opt-in (Settings, Chat, Images): Codex (offered once when signed in with a ChatGPT plan), Google Flow through `gf`, or any command (`{prompt}`, `{aspect}`, `{ratio}`, `{out}`, passed as data).
* Plugins (Settings, Plugins): Avataaars, DiceBear, Iconify, Lorem Picsum, Flags, QR codes, placed with `<x-plugin use="…">`, cached on disk. SVG import draws masked groups as images (Avataaars).
* Tokens: lean Claude Code sessions (42.7k to 20.6k prompt tokens), deferred tool schemas and context editing on the API, a fresh session with a recap past 120k (or on demand from the meter), per-turn cost for resumed Claude Code sessions, a 1M context meter, a turn budget. Model and effort pickers for Claude Code.
* Also: page switcher in the Chat top bar, steps stay folded while a turn runs (no flicker), `lint_design` asks 24 px targets on desktop screens, the installer keeps `papercraft-mcp` current.
* Evidence: `src/mcp/{refs,imagegen}.rs`, `src/plugins.rs`, `src/io/svg_import.rs`, `src/ui/{chat,chat_msgs,chat_agents,settings}.rs`, `src/chat/{anthropic,claude_code}.rs`, `tests/chat_tools.rs`, `specs/chat-tokens/spec.md`.
### 2026-10-22: 0.6.1 (agents via ACP, annotations)
* Agents are found through the login shell's PATH (read once at startup, 3 s limit, merged with the app PATH and the usual folders), so an app opened from the Dock finds Claude Code, Codex and the rest. No install instructions anywhere; a missing agent shows Not found with Set path… and Docs.
* ACP backend (`src/chat/acp.rs`): any agent that speaks the Agent Client Protocol over stdio, with PaperCraft's MCP server, streamed updates, permission flow, cancel and load. Registry as data in `src/chat/agents.rs`: native agents found on PATH, npx agents off until enabled, custom agents by name, command and arguments. Verified here: OpenCode works; Gemini CLI's server currently refuses ACP clients; Cursor needs `cursor-agent login`; Pi works through `pi-acp` after enabling.
* Agent panel over the chat column (Detected, Enable via npx, Not found, API endpoints, Custom, search), a Connect an agent setup card, a sign-in card, and multiple `@ Selection` chips.
* Settings → Chat redesigned: one agents list with details, endpoints, defaults, scrolling page on one label grid.
* Send bug: a turn that cannot start keeps the typed text and shows an error row with Retry, never a silent no-op (`a_failed_start_keeps_the_text_and_shows_an_error`).
* Annotations: notes with leader lines on a page, six categories with keys (style comes only from the category), project and per-page templates with built-ins and a Customize modal, view modes (⌘⇧A), Annotate tool (N), side view, inspector section, Annotate with AI, six MCP tools (`annotate` batches), and comments in `get_design_spec` and the code exports. Exports and Present leave annotations out.
* Evidence: `src/chat/{path,agents,acp}.rs`, `src/ui/{chat_agents,annotations,annotations_canvas}.rs`, `src/model/annotation.rs`, `src/editor/annotations.rs`, `src/mcp/tools.rs`, `tests/annotations*.rs`, `specs/chat-agents/`, `specs/annotations/`, `docs/chat.md`, `docs/annotations.md`.
### 2026-10-21: Chat mode
* Chat layout next to the canvas (⌘J, `Design | Chat`), with three backends: Claude Code and Codex through their CLIs (`claude -p` stream-json, `codex exec --json`) against the app's MCP server, and the Anthropic API with a key in the OS credential store. One event stream for all three; tool calls run through the same MCP dispatch, so runs, review and revert behave as before.
* Thread: markdown replies, thinking row, tool cards, step groups, plan from `TodoWrite`, approval for destructive tools on the API backend, run checkpoints with Restore to here, usage line and context meter, `@ Selection` and image attachments, Stop.
* Chats live in the project's `chats/` folder. Settings → Chat holds CLI paths, the default backend and the API key.
* Offline CLI fix: an offline save writes no camera, and a top-level shape created without a position goes to the next free spot instead of the origin.
* Evidence: `src/chat/`, `src/ui/chat.rs`, `src/ui/chat_msgs.rs`, `src/ui/chat_md.rs`, `src/ui/settings.rs`, `src/mcp/exec.rs`, `tests/fixtures/chat/`, `specs/chat/`, `docs/chat.md`.
### 2026-10-21: Agent runs and change review
* Agent editing calls group into runs, snapshot each edited page as `Before agent run N`, and end on 30 seconds idle, `finish_working_on_nodes`, or project switch. Runs persist under `runs/` and keep the newest 50.
* Agent view lists runs and supports review, whole-run revert, per-change undo and accept all. Review adds canvas outlines and a finish toast; palette commands review or revert the last run.
* Id-paired page diffs power review; History version compare UI remains todo. Completed with full restore (including variables, modes and tokens), tool edit classification, and wasm support.
### 2026-10-21: Design libraries and offline CLI
* Variables are now collections with modes, slash groups, four types and aliases, stored in `design.json` (project version 2; 0.4.0 refuses migrated projects). Each page keeps a derived cache; every edit is one undo step per page, and the page-only removals are gone. Per-page active mode per collection.
* Fields bind to variables (stroke, text color, size, gap, padding, radius, font size, line height, opacity, visible) in the inspector and with `bind_variable`; gradients do not bind yet.
* Instances work across pages (`component_key`, source page or library); deleting a main flags its instances.
* Libraries: publish a snapshot (`library.json`), enable, update with review (overrides kept), disable, and keep working when the source is missing. Variables modal, Libraries modal and Assets view in the UI; `create_collection`, `delete_variables`, `bind_variable` and five `*_library` tools in MCP (61 tools).
* `papercraft-cli call --offline` and `papercraft-cli shell` run the tools in-process on the project store, refuse a project the app has open, and fall back to the software adapter for screenshots. See `docs/agents.md`.
* Evidence: `src/variables.rs`, `src/editor/design.rs`, `src/libraries.rs`, `src/cli.rs`, `tests/{libraries,cross_page_components,variables_ui,assets_panel,cli_offline}.rs`, specs in `specs/design-libraries/` and `specs/cli-offline/`.
### P6 notes
* **Export** (`io/export.rs`): scope = selection, each frame, page or all pages; format =
+169 -243
View File
@@ -1,365 +1,291 @@
<h1 align="center">PaperCraft</h1>
<p align="center">
<b>Design and whiteboarding on an infinite canvas; a native, local-first, agent-driven design tool, built in pure Rust.</b>
<b>A native, local-first design and whiteboard canvas that AI agents can drive.</b>
</p>
<p align="center">
Frames, auto layout, components, variables and icons, plus a hand-drawn whiteboard mode,<br>
in a native app written entirely in Rust. Open source, offline, and drivable by AI agents.
</p>
<p align="center">
<img alt="Status: early alpha" src="https://img.shields.io/badge/status-early%20alpha-d69e2e?style=flat-square">
<img alt="100% Rust" src="https://img.shields.io/badge/100%25-Rust-b7410e?style=flat-square&logo=rust">
<img alt="Native on egui and wgpu" src="https://img.shields.io/badge/egui%20%C2%B7%20wgpu-native-2f7bf5?style=flat-square">
<img alt="MCP server and CLI for agents" src="https://img.shields.io/badge/agents-MCP%20%2B%20CLI-555555?style=flat-square">
<img alt="Status: alpha" src="https://img.shields.io/badge/status-alpha-d69e2e?style=flat-square">
<img alt="Rust" src="https://img.shields.io/badge/Rust-egui%20%C2%B7%20wgpu-b7410e?style=flat-square&logo=rust">
<img alt="Agents: MCP and CLI" src="https://img.shields.io/badge/agents-MCP%20%2B%20CLI-555555?style=flat-square">
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-3a3a3a?style=flat-square">
</p>
<br>
<p align="center">
<img src="docs/screenshots/app_demo.png" alt="PaperCraft with a launch plan: a Week plan frame with sticky notes and a progress bar, a Sketches frame with hand-drawn shapes, the Layers panel and the Design inspector" width="100%">
<img src="docs/screenshots/readme/hero.png" alt="PaperCraft with the Redesign page of its own design file open: layers on the left, the canvas in the middle, the inspector on the right" width="100%">
<br>
<sub>A planning board: frames, sticky notes, a progress bar, hand-drawn sketches, the Layers panel and the Design inspector.</sub>
<sub>PaperCraft editing its own design file (the Redesign page).</sub>
</p>
<p align="center">
<a href="#what-it-is">What it is</a> ·
<a href="#features">Features</a> ·
<a href="#drive-it-with-agents">Agents</a> ·
<a href="#design-systems-variables-components-icons">Design systems</a> ·
<a href="#agents">Agents</a> ·
<a href="#get-started">Get started</a> ·
<a href="#keyboard-shortcuts">Shortcuts</a> ·
<a href="#status">Status</a> ·
<a href="#downloads">Downloads</a> ·
<a href="#status-and-known-limits">Status</a> ·
<a href="#project-layout">Layout</a> ·
<a href="#license-and-credits">License</a>
</p>
<br>
## What it is
<table>
<tr>
<td width="25%" valign="top">
<h3>Local-first</h3>
Projects are plain folders of JSON in <code>~/Documents/papercraft</code>. Autosave with atomic writes, no account, no cloud.
</td>
<td width="25%" valign="top">
<h3>Native and fast</h3>
egui on wgpu (Metal, Vulkan, DX12). No Electron, no web view. Cached tessellation: a frame with 10k visible nodes draws in about 3 ms.
</td>
<td width="25%" valign="top">
<h3>Design and whiteboard</h3>
Auto layout, components and variables next to hand-drawn shapes, bound arrows, sticky notes and a laser pointer, on the same canvas.
</td>
<td width="25%" valign="top">
<h3>Agent-ready</h3>
40 MCP tools and a shell CLI. Agents write HTML into layers, screenshot the result and lint it, one undo step per call.
</td>
</tr>
</table>
PaperCraft is an infinite-canvas design tool and whiteboard written in Rust (egui on wgpu). It runs as a desktop app with no account and no cloud: a project is a folder of JSON files on your disk. It also serves the Model Context Protocol and ships a CLI, so an agent such as Claude Code or Codex can read and edit the open canvas, screenshot the result and lint it, one undo step per tool call.
<br>
It is an alpha. It is good for building screens, design systems and sketches, and it is not a replacement for a mature design tool. See [Status and known limits](#status-and-known-limits).
## Features
**Canvas and layout**
* Frames with clipping, groups, vector shapes with the Pen and Bézier editing, boolean operations, gradients, image fills, strokes, per-corner radii, opacity and blend modes, drop shadows, rich text, smart guides, measurements, align and distribute.
* Auto layout (direction, gap, padding, hug, fill, wrap, space-between) and constraints.
* A layers tree you can drag to reorder or re-parent, an inspector with Design and Prototype tabs, and a command palette over every action, page and layer (⌘K).
* Whiteboard mode: hand-drawn (rough.js-style) shapes, arrows bound to shapes, elbow connectors, sticky notes, freehand ink and a laser pointer on the same canvas.
* Pages: each page is its own canvas with its own undo history and view.
**Design systems**
* **Components** work across pages and across projects. Edit a main component and its instances follow, except the properties an instance overrode.
* **Shared libraries:** publish a project as a library, enable it in other projects, and take updates when it changes.
* **Variables:** collections with modes, slash groups (`color/brand/primary`), types (color, number, string, boolean) and aliases. Fills, strokes, text color, size, gap, padding, radius, font size, line height, opacity and visibility bind to variables.
* **Variables modal** (⌘⌥⇧V, or "Variables…" in the palette) to edit all of it; **Assets view** (side tab) with components grouped by name; **Libraries modal** to publish, enable and update.
* Lint (`lint_design`) for contrast, the 4px grid, type scale, touch targets, default names and hard-coded colors, with auto-fix.
* Design tokens out as CSS, JSON (W3C DTCG) or Tailwind `@theme`; code out as JSX with inline styles, Tailwind or HTML.
<table>
<tr>
<td width="50%" valign="top">
<img src="docs/screenshots/milestone3_figma_core.png" alt="A design with frames, auto layout, a component and its instances, and vector shapes" width="100%">
<br>
<h3>Design tools</h3>
Frames with clipping, groups, components with instances and per-property overrides, auto layout (direction, gap, padding, hug, fill, wrap, space-between), constraints, the Pen with Bézier editing, boolean operations, gradients, image fills, strokes, per-corner radii, opacity and blend modes, rich text, smart guides and measurements, align and distribute.
<img src="docs/screenshots/readme/variables.png" alt="The Variables modal listing the Colors collection with four Catppuccin modes" width="100%">
<br><sub>Variables modal: collections, modes, groups and types.</sub>
</td>
<td width="50%" valign="top">
<img src="docs/screenshots/milestone4_whiteboard.png" alt="A whiteboard with hand-drawn shapes, bound arrows, an elbow connector and sticky notes" width="100%">
<br>
<h3>A whiteboard that sketches</h3>
Hand-drawn (rough.js-style) rectangles, ellipses, diamonds and lines, arrows that bind to shapes and re-route when they move, elbow connectors, sticky notes, freehand ink with pressure, a laser pointer and a shape library.
<img src="docs/screenshots/readme/assets.png" alt="The Assets side view with components grouped into Banner, Button, Checkbox and Chip" width="100%">
<br><sub>Assets view: components grouped by name, from this file and enabled libraries.</sub>
</td>
</tr>
<tr>
<td width="50%" valign="top">
<img src="docs/screenshots/milestone5_inspector.png" alt="The inspector with position, size, constraints, auto layout, fills, strokes and export sections" width="100%">
<br>
<h3>Inspector, layers and a palette</h3>
A sectioned inspector, a layers tree you can drag to reorder or re-parent, 100+ keyboard shortcuts, and a command palette over every action, page and layer (⌘K).
<img src="docs/screenshots/readme/libraries.png" alt="The Libraries modal with one enabled library" width="100%">
<br><sub>Libraries modal: publish this file, enable libraries from the store.</sub>
</td>
<td width="50%" valign="top">
<img src="docs/screenshots/milestone6_svg_import.png" alt="An imported SVG on the canvas" width="100%">
<br>
<h3>Import and export</h3>
Export a selection, each frame, a page or the whole project to PNG (1 to 4x), SVG or vector PDF. Import <code>.excalidraw</code> scenes and libraries, SVG and images; paste between pages, projects and apps.
<img src="docs/screenshots/readme/agent-review.png" alt="Agent run review: a list of changes on the left and green, yellow and red outlines on the canvas" width="100%">
<br><sub>Review of an agent run, with the changes outlined on the canvas.</sub>
</td>
</tr>
</table>
### Themes
**Prototyping and review**
* Prototype links between frames and a **Present** mode that follows them with a camera glide.
* **Version history:** named and automatic saved versions per page; rename, restore, delete.
* **Agent runs:** editing tool calls group into a run. PaperCraft saves an auto-version before the first edit, lists the run, and lets you review it (added, changed and removed layers, outlined on the canvas), revert one change, revert the whole run or accept it.
* **Comments** on the canvas.
System, Light, Dark and the four Catppuccin flavours: Latte, Frappé, Macchiato and Mocha. Pick one in **View › Theme** or search "theme" in the ⌘K palette.
**Sharing and platforms**
* **Shared projects** through an optional relay (`papercraft-relay`); concurrent edits to a page are merged. Without a relay nothing leaves your machine.
* **Themes:** System, Light, Dark and the four Catppuccin flavours (Latte, Frappé, Macchiato, Mocha).
* **Web build** that runs the editor in the browser (`sh web/build.sh`, served by `papercraft-relay --static web`).
* **Import and export:** Figma `.fig` files, `.excalidraw` scenes and libraries, SVG and images in; PNG (1 to 4x), SVG and vector PDF out, for a selection, each frame, a page or the whole project.
### Projects and pages
Projects live in `~/Documents/papercraft/<name>/` (`project.json`, one JSON file per page in `pages/`, plus `versions/`, `runs/` and library files). Work autosaves with atomic writes and files are versioned and migrated on load. `PAPERCRAFT_HOME` points to another folder.
PaperCraft opens on a **home screen** of your projects (recents grid with thumbnails; New, Import, and Rename, Duplicate or Move to Trash from each card's ⋯ menu or right-click; restore from Trash). A project is a folder in `~/Documents/papercraft/<name>/` with `project.json` and one JSON file per page in `pages/`. Work autosaves about a second after each change with crash-safe atomic writes; files are versioned and older versions migrate on load. Set `PAPERCRAFT_HOME` to use another folder. If you used the app under its earlier name, `~/Documents/paper-rs` is still read when it is the only one that exists.
## Agents
Each project has any number of **pages** (the Pages list at the top of the left sidebar: + to add, double-click to rename, right-click to duplicate or delete, drag to reorder). Each page is its own infinite canvas with its own undo history and view. Copy and paste works between pages and projects.
PaperCraft exposes **70 tools** (`src/mcp/tools.rs`) three ways. They run the same code inside the app.
### File formats
| Format | Use |
| Way | Notes |
|---|---|
| Project folder (`project.json` + `pages/*.json`) | The native format. Plain, versioned JSON. |
| `.papercraft` | A single-file document (`papercraft FILE.papercraft`, not autosaved). `--import` turns it into a project. |
| `.paper-rs` | The earlier single-file extension. Old files still open. |
| PNG, SVG, PDF | Export: selection, frames, page or all pages. PDF is vector, with gradients, images and blend modes. |
| `.excalidraw`, `.excalidrawlib`, SVG, images | Import (drag and drop, ⌘O, or `--import`). |
## Drive it with agents
![A sign-in screen written by an agent through write_html](docs/screenshots/milestone7_mcp.png)
PaperCraft serves the [Model Context Protocol](https://modelcontextprotocol.io) while it runs, so agents such as Claude Code and Codex can read and design on the open canvas. Every tool call runs through the editor like a user edit: one undo step per call, and the window repaints immediately. Tool names and arguments follow other design-tool MCP servers where there is an equivalent, so prompts written for them carry over.
<table>
<tr>
<td width="33%" valign="top">
<img src="docs/screenshots/agent_signin.png" alt="A dark sign-in screen built from a component, an icon and variables" width="100%">
<br><sub>A sign-in screen: variables, an icon and a component instance.</sub>
</td>
<td width="67%" valign="top">
<img src="docs/screenshots/agent_dashboard.png" alt="A dashboard with a sidebar, three stat cards and a bar chart" width="100%">
<br><sub>A dashboard written in one <code>write_html</code> call, then checked with <code>lint_design</code>.</sub>
</td>
</tr>
<tr>
<td colspan="2" valign="top">
<img src="docs/screenshots/agent_landing.png" alt="A landing page with a hero and three feature cards" width="100%">
<br><sub>A landing page: hero, call to action and feature cards, all colors from variables.</sub>
</td>
</tr>
</table>
* **Streamable HTTP** (built into the app): `http://127.0.0.1:29980/mcp`. Loopback only; requests from browsers (with an `Origin` header) and foreign `Host` headers are rejected. `PAPERCRAFT_MCP_PORT=NNNN` changes the port; `PAPERCRAFT_MCP=0` turns the server off.
* **stdio**: `papercraft-mcp` (built next to `papercraft`) relays stdio to the running app. It lists the tools even when the app is closed, and tells the agent to start PaperCraft if a call can't reach it.
* **Shell**: `papercraft-cli` calls the same tools, so an agent with a terminal needs no schemas in its context.
### Claude Code
| MCP over HTTP | Built into the app: `http://127.0.0.1:29980/mcp`. Loopback only; browser requests (with an `Origin` header) and foreign `Host` headers are rejected. `PAPERCRAFT_MCP_PORT` changes the port, `PAPERCRAFT_MCP=0` turns it off. |
| MCP over stdio | `papercraft-mcp` relays stdio to the running app. It lists tools even when the app is closed. |
| Shell | `papercraft-cli` calls the same tools, so an agent with a terminal needs no schemas in its context. |
```sh
# HTTP (the app must be running)
# Claude Code
claude mcp add --transport http --scope user papercraft http://127.0.0.1:29980/mcp
# or stdio through the bridge
claude mcp add --scope user papercraft -- /path/to/papercraft-mcp
```
### Design tab
The sidebar's **Design** tab (next to Layers and Library) lists the project's color variables as
editable swatches, switches variable modes (for example the four Catppuccin flavours), and lists the
page's components with Go to and Insert buttons. Editing a variable recolours every fill that follows it.
### Codex
```sh
# Codex
codex mcp add papercraft --url http://127.0.0.1:29980/mcp
# or stdio
codex mcp add papercraft -- /path/to/papercraft-mcp
```
which writes this to `~/.codex/config.toml` (either form works):
The main write tool is `write_html`: HTML with inline styles becomes layers (flexbox maps onto auto layout), and `update_styles` takes the same CSS as JSON. Other groups cover reading and screenshots, variables and bindings, components, libraries, icons, lint, diffs, export and agent-run bookkeeping. The full list is `papercraft-cli list`; each schema is `papercraft-cli schema <tool>`; the reference is [skills/papercraft/references/tools.md](skills/papercraft/references/tools.md).
```toml
[mcp_servers.papercraft]
url = "http://127.0.0.1:29980/mcp"
# command = "/path/to/papercraft-mcp"
```
### Without the app
Then ask the agent something like *"In PaperCraft, create a 390×844 mobile artboard and design a sign-in screen"*, or *"draw a flowchart of our deploy process on a new page, hand-drawn style"*. The [`papercraft` and `papercraft-design` agent skills](skills) teach an agent the workflow (build, screenshot, lint, fix) and design rules; [docs/agents.md](docs/agents.md) has the full guide.
### Shell (no MCP client needed)
The app must be running with a project open.
`papercraft-cli` works with PaperCraft closed. When nothing answers on the port, or with `--offline`, tools run inside the CLI on the project store and every editing call is saved; the project opens normally in the app later. With the app open on a project, `--offline` on that same project is refused, so two writers never share a folder. Screenshots use the GPU, or the software adapter when there is none.
```sh
papercraft-cli list # tool names, one line each (works offline)
papercraft-cli schema write_html # one tool's full schema
papercraft-cli call get_basic_info
papercraft-cli call create_artboard '{"name":"Hero","styles":{"width":"800px","height":"400px"}}'
echo '{"nodeId":"12"}' | papercraft-cli call get_screenshot - --out hero.png
papercraft-cli call create_file '{"name":"Demo"}' --offline
papercraft-cli call get_screenshot '{"nodeId":"abc123:1"}' --project Demo -o card.png
```
Text goes to stdout, images are saved to `--out` (default `<tool>.png`) and the path is printed, and the exit status is 1 on a tool error or when the app isn't running.
### Tools
| Group | Tools |
|---|---|
| Projects & pages | `list_resources`, `open_file`, `create_file`, `create_page`, `rename_pages` |
| Read | `get_basic_info`, `get_selection`, `get_node_info`, `get_children`, `get_tree_summary`, `get_computed_styles`, `get_jsx`, `find_nodes`, `get_fill_image`, `get_font_family_info`, `get_guide` |
| See | `get_screenshot` (PNG image content of a node or the page), `export` (PNG/SVG/PDF files), `export_combined_pdf` |
| Write | `create_artboard`, `write_html`, `update_styles`, `set_text_content`, `rename_nodes`, `duplicate_nodes`, `move_nodes`, `delete_nodes`, `finish_working_on_nodes` (saves) |
| Whiteboard and session | `create_shape` (rectangles, ellipses, diamonds, stars, stickies, text, lines, arrows bound to shapes), `select_nodes`, `undo`, `redo` |
| Design system | `get_variables`, `set_variables`, `set_variable_mode`, `get_components`, `create_component`, `create_instance`, `search_icons`, `lint_design` |
`write_html` takes HTML with inline styles: flexbox (`display:flex`, direction, gap, padding, alignment, `flex-grow`, wrap) and block stacking map onto auto layout with CSS's stretch rules; text gets size, weight, italic, color, line height, letter spacing, alignment and rich-text runs (`<b>`, `<i>`, `<span style>`); boxes get backgrounds (colors, gradients, images), borders, radii, opacity and blend modes; `<img>` takes local paths or `data:` URIs and `<svg>` is imported as vectors. `update_styles` takes the same CSS as JSON, plus the hand-drawn keys `sketch`, `roughness`, `fillStyle`, `strokeStyle`. Node ids look like `3fa9c1:14` (page and node); `pageId` lets an agent work on another page without switching the user's view. The full reference is in [skills/papercraft/references/tools.md](skills/papercraft/references/tools.md).
## Design systems: variables, components, icons
Agents (and `papercraft-cli`) get the pieces of a design system, so files aren't a pile of hex codes and copies:
`papercraft-cli shell` keeps one session open and reads a script from stdin. `:watch on` re-renders the artboard last edited to `preview.png` after every editing call (and shows it inline on iTerm2, WezTerm and kitty).
```sh
papercraft-cli call set_variables '{"variables":{"surface":"#313244","accent":"#cba6f7"}}'
papercraft-cli call write_html '{"targetNodeId":"root","mode":"insert-children","html":"<div style=\"background:var(--surface)\">…</div>"}'
papercraft-cli call create_component '{"nodeId":"<frame>","name":"Button / Primary"}'
papercraft-cli call create_instance '{"componentId":"<id>","parentId":"<frame>"}' # then set_text_content on its layers
papercraft-cli call lint_design '{"nodeId":"<frame>"}' # contrast, grid, type scale, names
papercraft-cli icons add phosphor lucide # open icon sets from npm, with their licences
papercraft-cli icons search arrow left
# in write_html: <x-paper-icon name="phosphor:gear" size="20" color="var(--accent)"/>
papercraft-cli shell --offline --project Demo <<'EOF'
set_variables {"variables":{"bg":"#1e1e2e","surface":"#313244","text":"#cdd6f4","accent":"#cba6f7"}}
:watch on
write_html {
"targetNodeId": "abc123:1",
"mode": "insert-children",
"html": "<div style='font-size:28px;color:var(--text)'>Welcome back</div>"
}
EOF
```
* **Variables** are named colors per project (`get_variables`, `set_variables`). A fill or text color written as `var(--name)` stays linked; `set_variables` moves every linked fill on every page in one undoable step, and the link is saved in the file. `set_variables` with a `mode` stores one set of values per mode (Light, Dark) and `set_variable_mode` switches the whole project. Strokes and gradients keep fixed colors; fill-based icon sets (Phosphor, Material) follow variables, stroke sets (Lucide) don't.
* **Components** (`create_component`, `create_instance`, `get_components`, `<x-paper-instance>`): edit the main component and every instance follows, except what an instance overrode (text, fills, size, ... are marked automatically when set through `set_text_content` / `update_styles`). Components and their instances live on one page.
* **Icons** live in `<data dir>/papercraft/icons/<set>/` (override with `PAPERCRAFT_ICONS`). Sets: Lucide (ISC), Tabler (MIT), Phosphor (MIT), Heroicons (MIT), Material Symbols (Apache-2.0); each keeps its licence file. `examples/taskflow.py` builds an 8-screen app with all three.
* **Lint** (`lint_design`) checks WCAG contrast, spacing on a 4px grid, the type scale, text under 12px, touch targets under 44px, default layer names and hard-coded colors that should be variables, and says how to fix each.
<p align="center">
<img src="docs/screenshots/readme/offline-shell.png" alt="preview.png written by the offline shell: a sign-in card with a heading, two fields and a button" width="240">
<br>
<sub><code>preview.png</code> from an offline shell script, with no app running.</sub>
</p>
More in [docs/design-system.md](docs/design-system.md).
### Chat
Chat mode (⌘J, or `Design | Chat` in the top bar) puts a conversation next to the canvas. It runs Claude Code and Codex through their CLIs, any agent that speaks the Agent Client Protocol (ACP, such as OpenCode, Gemini CLI or Cursor) found on your PATH, or the Anthropic API with your own key. It shows tool calls, checkpoints and run review in the thread. Chats are saved in the project's `chats/` folder. See [docs/chat.md](docs/chat.md).
<p align="center">
<img src="docs/screenshots/readme/chat.png" alt="Chat mode: the chat column on the left shows a finished agent run with its Review, Revert and Accept actions, and the canvas on the right" width="100%">
<br>
<sub>Chat mode with a finished agent run: review, revert or accept from the thread.</sub>
</p>
### Annotations
Annotations are notes that explain a design in place: business rules, behaviour, data sources, accessibility and dev notes, each a numbered card with a leader line to its layer. Categories set the look, templates say which notes a page wants (product spec, dev handoff, accessibility review and more), and the view cycles between full notes, badges and hidden with ⌘⇧A. Exports and Present mode leave them out. Agents add them in one `annotate` call. See [docs/annotations.md](docs/annotations.md).
### Skills
[`skills/`](skills) holds agent skills: `papercraft` (the build, screenshot, lint, fix loop and tool cheat sheet), `papercraft-design` (design-quality rules) and `papercraft-critique`. [docs/agents.md](docs/agents.md) is the full guide: install, registering with agents, scripts, runs and review, safety. [docs/design-system.md](docs/design-system.md) covers variables, components and libraries.
## Get started
### Download
The macOS app (`papercraft-<version>-macos-<arch>.dmg`, containing PaperCraft.app) and the command-line tools (`papercraft-cli-<version>-macos-<arch>.zip`, with `papercraft-cli` and `papercraft-mcp`) are attached to each release of [masi/papercraft](https://git.marcospaulo.dev.br/masi/papercraft/releases). Builds are ad-hoc signed and not notarized, so on another Mac open the app with right-click › Open the first time.
Releases are at [git.marcospaulo.dev.br/masi/papercraft/releases](https://git.marcospaulo.dev.br/masi/papercraft/releases).
| Build | File |
|---|---|
| macOS app (Apple silicon) | `papercraft-<version>-macos-aarch64.dmg`, containing PaperCraft.app |
| Linux (x86_64) | `papercraft-<version>-linux-x86_64.tar.gz` |
| CLI tools, macOS | `papercraft-cli-<version>-macos-aarch64.zip` (`papercraft-cli` and `papercraft-mcp`) |
| CLI tools, Linux | `papercraft-cli-<version>-linux-x86_64.tar.gz` |
macOS builds are ad-hoc signed and not notarized: on another Mac, open the app with right-click, Open the first time. Other platforms: build from source.
### Build from source
You need Rust 1.95 or newer (`rust-version` in `Cargo.toml`). Install it with [rustup](https://rustup.rs).
You need Rust 1.95 or newer (see `rust-version` in `Cargo.toml`); install it with [rustup](https://rustup.rs).
```sh
cargo build --release
./target/release/papercraft # projects home screen
./target/release/papercraft --demo # sample planning board (not saved)
./target/release/papercraft ~/Documents/papercraft/Plan # open a project folder
./target/release/papercraft board.papercraft # open a document
packaging/macos/package.sh # PaperCraft.app on a DMG, plus the CLI zip (macOS)
./target/release/papercraft # projects home screen
./target/release/papercraft ~/Documents/papercraft/Plan # open a project folder
./target/release/papercraft --demo # sample board, not saved
packaging/macos/package.sh # PaperCraft.app on a DMG, plus the CLI zip
```
**macOS:** `xcode-select --install` for the linker, then the commands above. It uses Metal through wgpu. Shortcuts use ⌘, and trackpad pinch zooms.
**macOS:** `xcode-select --install` for the linker. It renders with Metal through wgpu. **Linux:** install the runtime libraries (`sudo apt install libxkbcommon-x11-0 libxcb-xkb1 libvulkan1 mesa-vulkan-drivers` on Debian or Ubuntu); it runs on X11 and Wayland through Vulkan, with GL as a fallback, and file dialogs use the XDG desktop portal.
**Linux:** install the runtime libraries (`sudo apt install libxkbcommon-x11-0 libxcb-xkb1 libvulkan1 mesa-vulkan-drivers` on Debian/Ubuntu), then build. It runs on X11 and Wayland through Vulkan, or GL as a fallback. Shortcuts use Ctrl. File dialogs use the XDG desktop portal.
To run a test copy next to your own PaperCraft, give it its own folder and port: `PAPERCRAFT_HOME=/tmp/pc PAPERCRAFT_MCP_PORT=29998 ./target/release/papercraft`.
### Headless (servers, CI)
No display is needed. wgpu renders offscreen, through Mesa lavapipe when there is no GPU:
Headless rendering needs no display (wgpu renders offscreen, through Mesa lavapipe without a GPU):
```sh
papercraft --screenshot ui.png --demo --size 1440x900 --scale 2 # full UI
papercraft --screenshot home.png --home # projects home screen
papercraft --export-png out.png PROJECT_DIR --page 0 --scale 2 [--transparent]
papercraft --export-svg out.svg PROJECT_DIR
papercraft --export-pdf out.pdf PROJECT_DIR --frames # one PDF page per frame
papercraft --export out_dir PROJECT_DIR --format png --scope frames # a folder of PNGs
papercraft --import board.excalidraw # new project, prints its folder
papercraft --screenshot ui.png --demo --size 1440x900 --scale 2
papercraft --export-png out.png PROJECT_DIR --page 0 --scale 2
papercraft --export-pdf out.pdf PROJECT_DIR --frames
papercraft --import board.excalidraw # new project, prints its folder
```
### Tests
```sh
cargo test # unit, scenario, headless GPU and CLI tests
PAPERCRAFT_REQUIRE_GPU=1 cargo test # fail (instead of skip) when no GPU adapter exists
cargo test --no-fail-fast
PAPERCRAFT_REQUIRE_GPU=1 cargo test # fail instead of skip when there is no GPU adapter
cargo test --release --test perf -- --nocapture # 10k-element frame timings
```
The scenario tests drive the editor with synthetic pointer and keyboard events; `tests/mcp.rs` exercises every MCP tool on a headless session, then through an rmcp client over HTTP and through the `papercraft-mcp` stdio bridge. The SVG export is rasterized with resvg and compared with the GPU render.
The scenario tests drive the editor with synthetic pointer and keyboard events; `tests/mcp.rs` exercises every MCP tool on a headless session, then over HTTP and through the stdio bridge. `cargo check --lib --target wasm32-unknown-unknown` covers the web build.
## Keyboard shortcuts
⌘ on macOS, Ctrl on Linux and Windows. Press `?` or ⌘/ in the app for the full grouped list (100+ bindings), or ⌘K to search every command.
⌘ on macOS, Ctrl on Linux. Press `?` or ⌘/ in the app for the full grouped list, or ⌘K to search every command.
| Keys | Action | Keys | Action |
|---|---|---|---|
| V / 1 | Select | ⌘K | Command palette |
| H, or hold Space | Hand (pan) | ⌘Z / ⌘⇧Z | Undo / redo |
| F or A | Frame | ⌘G / ⌘⇧G | Group / ungroup |
| R / 2, O / 4, D / 3 | Rectangle, ellipse, diamond | ⌘⌥G | Frame selection |
| ⇧Y, ⇧S | Polygon, star | ⌘⌥K / ⌘⌥B | Create component / detach |
| R / 2, O / 4, D / 3 | Rectangle, ellipse, diamond | ⌘⌥G | Wrap selection in frame |
| ⇧Y, ⇧S | Polygon, star | ⌘⌥K / ⌘⌥B | Create component / detach instance |
| L / 6, ⇧L / 5 | Line, arrow | ⇧A / ⌥⇧A | Add / remove auto layout |
| P, ⇧P / 7 | Pen, pencil | ⌥A ⌥H ⌥D / ⌥W ⌥V ⌥S | Align left/center/right, top/middle/bottom |
| P, ⇧P / 7 | Pen, pencil | ⌥A ⌥H ⌥D / ⌥W ⌥V ⌥S | Align left, center, right / top, middle, bottom |
| T / 8, S | Text, sticky note | ⌥⇧H / ⌥⇧V | Distribute spacing |
| K | Laser pointer | ⌥⇧U S I E | Union, subtract, intersect, exclude |
| E / 0 | Eraser | ⌘E | Flatten |
| 9, ⌘⇧K | Place image | ⌘B / ⌘I / ⌘U / ⌘⇧X | Bold, italic, underline, strikethrough |
| Enter / ⇧Enter | Edit (text, path) / select parent | ⌘⌥H | Hand-drawn style |
| Enter / ⇧Enter | Edit / select parent | ⌘⌥H | Hand-drawn style |
| Tab / ⇧Tab | Next / previous sibling | ⇧H / ⇧V | Flip |
| ⌥-drag | Duplicate while dragging | ⌘⌥C / ⌘⌥V | Copy / paste properties |
| ⌥ hover | Measure distances | ⌘R | Rename |
| ⌘⌥⇧V | Variables | ⌘⌥C / ⌘⌥V | Copy / paste properties |
| ⌘= / ⌘- / ⇧0 | Zoom in / out / 100% | ⇧1 / ⇧2 | Zoom to fit / selection |
| PageUp / PageDown | Previous / next page | ⌘\\ | Show / hide UI |
| ⌘J | Design / Chat mode | ⌘L | Add selection to chat (Chat mode) |
| N | Annotate tool | ⌘⇧A | Annotations: full, badges, hidden |
Draw a frame around existing shapes and it adopts them; shapes drawn inside a frame become its children, and dragging a layer into or out of a frame re-parents it. Hold ⌘/Ctrl while dragging to suspend snapping.
Draw a frame around existing shapes and it adopts them; dragging a layer into or out of a frame re-parents it. Hold ⌘ while dragging to suspend snapping.
## Status
## Status and known limits
> [!IMPORTANT]
> **PaperCraft is in early alpha.** It is usable for planning, sketching and building screens, but it is not a replacement for a mature design tool. [ROADMAP.md](ROADMAP.md) lists what is missing, in priority order; [PROGRESS.md](PROGRESS.md) is the milestone history.
Known limits:
> PaperCraft is an alpha. [ROADMAP.md](ROADMAP.md) lists what is missing, in priority order; [PROGRESS.md](PROGRESS.md) is the milestone history.
* **No rotation.** Nodes are axis-aligned boxes; rotated imports are baked into paths.
* **Text** is Inter only (regular, bold, italic, bold italic) with no shaping: no ligatures, complex scripts or RTL, and no font picker. IME preedit is not displayed (committed text works).
* **Rendering approximations.** Frame clipping is a rectangle, so rounded frames don't clip their corners. Group opacity multiplies into children. Overlay, dodge, burn, light, difference, exclusion and the HSL blend modes draw as Normal on the canvas (they are exact in SVG export).
* **Booleans are destructive**: the result is a new vector path with flattened curves.
* **Variables are colors only** and apply to fills and text color; strokes and gradients keep fixed colors.
* **`write_html`** ignores margin, grid, tables, shadows and transforms (it reports them as `ignoredStyles`). Remote `http(s)` images aren't fetched; pass a local path or a `data:` URI.
* **MCP**: one project is open at a time, so `fileId` must name the open project. Moving or duplicating layers between pages isn't supported.
* **Pen pressure.** winit 0.30 does not expose tablet pressure for pen events that arrive as mouse input, which is common with macOS and Wacom tablets. Otherwise it is simulated from stroke velocity.
* **Linux file dialogs** need an XDG desktop portal. The headless CLI is unaffected.
* **PDF** text is outlined (not selectable).
* **Text** is Inter only, with no shaping (no ligatures, complex scripts or RTL) and no font picker. IME preedit is not displayed.
* **Rendering approximations.** Frame clipping is a rectangle, so rounded frames do not clip their corners. Overlay, dodge, burn, light, difference, exclusion and the HSL blend modes draw as Normal on the canvas (they are exact in SVG and PDF export). There is no layer or background blur yet.
* **Variables:** gradients keep fixed colors; there are no text styles and no component variants or properties.
* **Booleans are destructive:** the result is a new vector path with flattened curves.
* **`write_html`** ignores margin, tables and transforms (it reports them as `ignoredStyles`) and does not fetch remote images; pass a local path or a `data:` URI.
* **Agents:** one project is open at a time in the app, and `move_nodes` stays on one page. The in-app Chat mode runs Claude Code, Codex, ACP agents or your own Anthropic key. Agents that are not in Chat connect over MCP or the CLI.
* **Sharing** has no live presence (cursors, selections) yet.
* **Pen pressure** is simulated from stroke velocity on macOS tablets, because winit 0.30 does not expose it for mouse-like pen events.
* **Releases** cover macOS (Apple silicon) and Linux x86_64. Windows packaging scripts exist but are not part of releases.
* **PDF** text is outlined, not selectable.
## Project layout
```
src/geom.rs vectors, rects, camera
src/vector.rs bezier paths: flatten, hit test, SVG data, shapes, dashes
src/model/ Node / NodeKind / paints / Document arena
src/history.rs transactions, undo/redo
src/layout.rs auto layout, constraints, group bounds
src/ink.rs stroke smoothing, pressure, outline
src/text.rs rich text layout and glyph outlines
src/project/ project store, manifest/page formats, migrations
src/session.rs open project, autosave, thumbnails
src/editor/ tools, structure (groups/components), vector ops, pages, text editing
src/render/ draw ops → cached meshes → wgpu; headless capture
src/io/ PNG, SVG, PDF, export scopes, Excalidraw + SVG import, clipboard
src/mcp/ MCP server (rmcp): tools, HTML/CSS mapping, lint, HTTP service
src/ui/ home screen, pages, layers, inspector, palette
src/bin/ papercraft-cli (shell access) and papercraft-mcp (stdio bridge)
skills/ agent skills: papercraft, papercraft-design
analysis/ behaviour studies and design notes
docs/ guides and headless screenshots produced by `cargo test`
src/geom.rs vectors, rects, camera
src/vector.rs bezier paths: flatten, hit test, SVG data, shapes, dashes
src/model/ Node, paints, Document arena
src/history.rs transactions, undo and redo
src/layout.rs auto layout, constraints
src/text.rs, ink.rs rich text layout, stroke smoothing
src/project/ project store, manifest and page formats, migrations
src/session.rs open project, autosave, thumbnails
src/variables.rs collections, modes, groups, types, aliases, bindings
src/libraries.rs publish, enable and update shared libraries
src/design_system.rs design-system import and export
src/versions.rs saved versions
src/runs.rs agent runs, auto-versions, revert
src/sync.rs, merge.rs relay file sync and page merge
src/editor/ tools, structure, vector ops, pages, text editing, design bindings
src/render/ draw ops, cached meshes, wgpu, headless capture
src/io/ PNG, SVG, PDF, export, Figma, Excalidraw and SVG import
src/mcp/ tools, HTML and CSS mapping, lint, diff, codegen, HTTP server
src/cli.rs offline calls and the shell behind papercraft-cli
src/ui/ home, panels, inspector, palette, Variables, Assets, Libraries, agent view
src/lottie/ icon motion
src/web/ browser build
src/bin/ papercraft-cli, papercraft-mcp, papercraft-relay
skills/ agent skills
specs/ feature specs (agent runs, design libraries, offline CLI, ...)
analysis/ behaviour studies and design notes
docs/ guides and screenshots
```
## Downloads
| Build | File | Notes |
|---|---|---|
| Windows installer | `papercraft-<ver>-windows-<arch>.msi` | Per-machine installer (WiX) |
| Windows portable | `papercraft-<ver>-windows-<arch>-portable.zip` | `papercraft.exe` + CLI and MCP bridge |
| macOS app | `papercraft-<ver>-macos-<arch>.dmg` | PaperCraft.app, drag to Applications. Ad-hoc signed, not notarized |
| Command-line tools | `papercraft-cli-<ver>-<platform>-<arch>.zip` | `papercraft-cli` and `papercraft-mcp` |
Releases: https://git.marcospaulo.dev.br/masi/papercraft/releases. Other platforms: build from source.
## License and credits
PaperCraft is dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
Dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
Bundled fonts, icons and other assets keep their own open licenses; each one is listed with its author, source and license in [ATTRIBUTION.md](ATTRIBUTION.md). Inter (Regular, Medium, SemiBold, Bold and italics) is © The Inter Project Authors under the SIL Open Font License 1.1 (`assets/fonts/OFL.txt`). A few algorithms are ported from MIT-licensed projects (rough.js, hachure-fill, Excalidraw); they are listed with their notices in [THIRD_PARTY.md](THIRD_PARTY.md).
Bundled fonts, icons and other assets keep their own licenses, listed in [ATTRIBUTION.md](ATTRIBUTION.md); Inter is © The Inter Project Authors under the SIL Open Font License 1.1. Some algorithms are ported from MIT-licensed projects (rough.js, hachure-fill, Excalidraw), with their notices in [THIRD_PARTY.md](THIRD_PARTY.md).
The app icon is original artwork ([`assets/app-icon/`](assets/app-icon/README.md)).
PaperCraft started as a fork of [storytold/paper-rs](https://git.marcospaulo.dev.br/storytold/paper-rs); thanks to its contributors.
### Reverse-engineered origin
PaperCraft is an independent, clean-room-style reimplementation. It was reverse engineered from [Paper](https://paper.design) by studying the behavior of the Paper desktop app (`analysis/PAPER_ARCHITECTURE.md`) with [REA](https://github.com/morluto/rea) and Claude Code; Figma and Excalidraw were studied from their public docs and, for Excalidraw, its MIT source (`analysis/`). Only *behavior* was studied: no Paper or Figma code, shaders, icons, fonts or assets are used or committed. PaperCraft is not affiliated with, sponsored by or endorsed by Paper or Figma; those names are used only to describe the workflows it is compatible with.
<sub>Photoshop, Illustrator and Adobe are trademarks of Adobe Inc.; Figma is a trademark of Figma, Inc.; Paper is a product of its respective owners. PaperCraft is an independent, open-source project.</sub>
PaperCraft is not affiliated with Paper or Figma. Only the behavior of other tools was studied (see `analysis/`); no code, shaders, icons, fonts or assets from them are used.
+43 -21
View File
@@ -2,7 +2,7 @@
PaperCraft is an early alpha: a local-first infinite-canvas design app that agents can drive. This
file lists what is still missing, in priority order, with an honest status. Done items are checked
against `src/mcp/tools.rs` and the UI code (2026-10-12). Milestone history is in
against `src/mcp/tools.rs` and the UI code (2026-10-12); rows 7, 8, 12, 15, 23, 25, 32, 34, 39, 40, 44, 45, 46 and section 6 were updated 2026-10-21; rows 15, 47 and 48 on 2026-10-22. Milestone history is in
[PROGRESS.md](PROGRESS.md); known rendering and import limits are in the README.
Status: **done** (works today), **partial** (some of it works), **todo**.
@@ -13,42 +13,43 @@ Agents can already build a design system through the tools; people cannot yet ma
| # | Item | Status | Notes |
|---|---|---|---|
| 1 | Inspector UI for variables | todo | Variables exist only through `get_variables` / `set_variables`. No panel to list, rename, edit or bind them. |
| 2 | Inspector UI for components | todo | Create component, detach and go-to-main are shortcuts (⌘⌥K / ⌘⌥B); there is no Components panel or asset browser. |
| 1 | Inspector UI for variables | **done** | Design tab lists/renames/adds/deletes variables & modes; Inspector binds/unlinks solid fills to variables. |
| 2 | Inspector UI for components | **done** | Design tab searches components, inserts instances, swaps/resets/detaches instances; Inspector header swaps/resets instances. |
| 3 | Design lint | **done** | `lint_design`: WCAG contrast, 4px grid, type scale, tiny text, 44px targets, default names, hard-coded colors. |
| 4 | Lint auto-fix | todo | `lint_design` suggests a fix per issue; nothing applies it. Safe candidates: snap spacing, rename layers, relink colors to variables. |
| 5 | Lint in the UI | todo | Show issues on the canvas or in a panel, click to select. |
| 6 | Variable modes | partial | Done through tools: `set_variables {mode}` stores values per mode and `set_variable_mode` switches the whole project. Not yet in the UI, and not per frame or page. |
| 7 | Number variables (spacing, radius, font size) | todo | Variables are colors only, and only for fills and text color. |
| 8 | Stroke and gradient variables | todo | Strokes and gradients keep fixed colors. |
| 4 | Lint auto-fix | **done** | `lint_design {fix: true}` and UI `Fix` / `Fix all`: snaps spacing to 4px grid, snaps type scale, enforces 44px targets, links matching colors to variables. |
| 5 | Lint in the UI | **done** | Live Lint section in Design tab; click issue to select & zoom, or click `Fix` / `Fix all`. |
| 6 | Variable modes | **done** | Mode selector + create/delete modes in Design tab and via `set_variables {mode}` / `set_variable_mode`. |
| 7 | Number variables (spacing, radius, font size) | **done** | Typed number, string and boolean variables in collections with groups and aliases; fields bind (size, gap, padding, radius, font size, line height, opacity, visible) in the inspector and `bind_variable`. |
| 8 | Stroke and gradient variables | partial | Strokes and text color bind to variables. Gradients keep fixed colors. |
| 9 | Text styles | todo | Named type styles (Heading / L, Body / M) that update every text layer using them. |
| 10 | Component variants and properties | todo | Variants are separate components named `Button / Primary`. No variant sets, boolean or text properties. |
| 11 | Swap instance, detach by tool | partial | Detach is a shortcut in the UI. No `swap_instance` or `detach_instance` tool. |
| 12 | Cross-page and shared libraries | todo | Components and instances must live on one page. |
| 13 | Export design tokens | partial | `get_variables` with `format: "css"` or `"json"` returns tokens. No Tailwind or Style Dictionary output, no file export from the UI. |
| 14 | Apply a design system to existing work | todo | Map hard-coded colors and sizes onto variables and components in one pass. |
| 11 | Swap instance, detach by tool | **done** | `swap_instance` and `detach_instance` MCP tools + UI controls in Design tab and Inspector. |
| 12 | Cross-page and shared libraries | **done** | Instances of a main on any page; publish a project as a library, enable, update and disable it in other projects (Libraries modal, `*_library` tools). |
| 13 | Export design tokens | **done** | `get_variables` with `format: "css"`, `"json"` (W3C DTCG + modes), or `"tailwind"` (`@theme`), plus Copy CSS / Copy JSON in Design tab. |
| 14 | Apply a design system to existing work | partial | `lint_design {fix: true}` links matching literal colors to variables and snaps spacing/type scale. |
## 2. Agent workflow
| # | Item | Status | Notes |
|---|---|---|---|
| 15 | MCP and CLI tool surface | **done** | 40 tools, one undo step per call, `papercraft-cli list / schema / call`. |
| 15 | MCP and CLI tool surface | **done** | 67 tools, one undo step per call, `papercraft-cli list / schema / call`. |
| 16 | Agent skills | **done** | `skills/papercraft` and `skills/papercraft-design`. |
| 17 | Accessibility annotations | todo | Reading order, roles and alt text on layers, checked by the linter. |
| 18 | Code export from frames | todo | `get_jsx` returns inline-style JSX only. No React / HTML+CSS with variables, no Tailwind (the `tailwind` format is accepted and ignored). |
| 18 | Code export from frames | **done** | `get_jsx` supports `format: "inline"`, `"tailwind"` (Tailwind utility classes), and `"html"` (HTML + CSS rules with `:root` variables). |
| 19 | Plugin and skill marketplace | todo | Skills are copied by hand today. |
| 20 | Screenshot diffing | todo | Compare two renders of a frame to confirm a change did what was asked. |
| 20 | Screenshot diffing | **done** | `diff_frames` tool (`src/mcp/diff.rs`) for structural/property frame diffing + `diff_rgba` pixel diffing with highlight PNG. |
| 21 | Moving nodes between pages | todo | `move_nodes` stays on one page. |
| 22 | Remote images in `write_html` | todo | Only local paths and `data:` URIs. |
| 46 | Design from the CLI without the app | **done** | `papercraft-cli call --offline` and `shell` run the tools in-process on the project store; screenshots use a GPU or the software adapter. |
## 3. Design features
| # | Item | Status | Notes |
|---|---|---|---|
| 23 | Prototyping links and flows | todo | No click-through between frames. |
| 23 | Prototyping links and flows | **done** | Prototype tab in the inspector; Present mode follows links with a camera glide. Smart transitions and hover states todo. |
| 24 | Responsive constraints and breakpoint preview | partial | Constraints (left, right, stretch, center, scale) exist in the editor; there is no breakpoint preview or per-size variants. |
| 25 | Shadows, blur and effects | todo | CSS `box-shadow` and filters are reported as ignored. |
| 26 | Margin and grid layout | todo | Flexbox only. |
| 25 | Shadows, blur and effects | partial | Drop shadow is an inspector effect. Layer and background blur todo (needs a renderer pass). |
| 26 | Margin and grid layout | partial | Wrapped-line cross alignment, per-line fill/align, and `layout_grid` track layout (`src/layout.rs`) implemented; CSS margin still ignored. |
| 27 | Font choice | todo | Inter only. |
| 28 | Rotation | todo | Nodes are axis-aligned. |
| 29 | Overlay, dodge, burn, light blend modes on the canvas | todo | Exact in SVG and PDF export, approximated as Normal on the canvas. |
@@ -59,9 +60,9 @@ Agents can already build a design system through the tools; people cannot yet ma
| # | Item | Status | Notes |
|---|---|---|---|
| 32 | Version history | todo | Undo per page and crash-safe autosave only; no named versions or restore. |
| 33 | Figma import | todo | SVG and Excalidraw import exist; `.fig` does not. |
| 34 | Multiplayer and cloud sync | todo | Local-first by design. If added, it must stay optional. |
| 32 | Version history | **done** | Named and automatic saved versions per page: rename, restore, delete (`src/versions.rs`). Restore now includes variables and tokens; compare todo. |
| 33 | Figma import | **done** | `.fig` binary (Kiwi wire decoder + zip container) and Figma REST API JSON import in `src/io/fig.rs`. |
| 34 | Multiplayer and cloud sync | partial | Optional shared projects through the relay, with merge of concurrent edits to one page. Presence (cursors, selections) todo. Stays optional. |
| 35 | Release builds for Windows and Linux | todo | The code targets them (wgpu, winit); packaging today is the macOS DMG and the `papercraft-cli` zip. |
## 5. Quality
@@ -71,3 +72,24 @@ Agents can already build a design system through the tools; people cannot yet ma
| 36 | Pen pressure on macOS tablets | todo | winit 0.30 does not expose pressure for mouse-like pen events. |
| 37 | Text shaping, ligatures, RTL | todo | No shaping. IME preedit is not shown. |
| 38 | Performance beyond 10k visible nodes | todo | Cached frames take about 3 ms at 10k nodes; not tuned for 100k. |
## 6. Agent runs (next)
Spec: [specs/agent-runs/spec.md](specs/agent-runs/spec.md), tasks: [specs/agent-runs/tasks.md](specs/agent-runs/tasks.md). Design: `PaperCraft` file, page `Agent runs`.
| # | Item | Status | Notes |
|---|---|---|---|
| 39 | Agent runs and auto-versions | **done** | Editing calls group into runs; edited pages get auto-versions; runs persist, revert per page, and prune to 50. |
| 40 | Review agent changes | **done** | Id-paired diff, grouped review, canvas overlay, per-change revert and accept all; version compare UI remains todo. |
| 41 | Agent presence on the canvas | todo | Outline the node a tool call touches, label it, pause or stop the run. |
| 42 | `get_context` tool | todo | Selection, variables, nearby components and lint summary in one call, so an agent orients in one round trip. |
| 43 | Comments assigned to agents | todo | `@agent` in a thread triggers an edit and a reply. Needs threaded comments. |
| 44 | In-app prompt bar | **done** | Chat mode: Claude Code, Codex or your own Anthropic key; see `docs/chat.md`. |
| 45 | Correct tool annotations | **done** | `lint_design` no longer sends `readOnlyHint`; `fix: true` edits are classified. |
## 7. Annotations and chat agents
| # | Item | Status | Notes |
|---|---|---|---|
| 47 | Design annotations | **done** | Notes with leader lines and categories, templates per project and page, view modes (⌘⇧A), Annotate tool (N), side view, inspector section, six MCP tools; see `docs/annotations.md`. |
| 48 | ACP agents in Chat | **done** | Any ACP agent on the PATH (OpenCode works; Gemini CLI refuses ACP clients for now; Cursor needs `cursor-agent login`), npx agents after enabling, custom agents; see `docs/chat.md`. |
+6
View File
@@ -17,6 +17,12 @@ assets from them are used.
Each ported module starts with a comment naming its source.
## Reimplemented formats
| Project | License | What was reimplemented | Where |
|---|---|---|---|
| [OpenDesign](https://github.com/nexu-io/open-design) | Apache-2.0 | The design-system package format (`manifest.json` / `tokens.css` / `DESIGN.md`), written from the published format description; no file of that project is copied | `src/design_system.rs` |
## Dependencies
Rust crates are pulled from crates.io under their own licenses (see `Cargo.lock`); notable ones
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"arrow-down","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,5.0],[12.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,12.0],[12.0,19.0],[5.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"arrow-up","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,12.0],[12.0,5.0],[19.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,19.0],[12.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"bold","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,12.0],[15.0,12.0],[17.82843,13.17157],[19.0,16.0],[17.82843,18.82843],[15.0,20.0],[7.0,20.0],[6.29289,19.70711],[6.0,19.0],[6.0,5.0],[6.29289,4.29289],[7.0,4.0],[14.0,4.0],[16.82843,5.17157],[18.0,8.0],[16.82843,10.82843],[14.0,12.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746],[-0.26511,0.0],[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0]],"o":[[0.0,0.0],[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746],[0.0,0.0],[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"bookmark","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,3.0],[18.41421,3.58579],[19.0,5.0],[19.0,20.0],[18.76689,20.64145],[18.17657,20.98397],[17.504,20.868],[12.992,18.29],[12.0,18.02665],[11.008,18.29],[6.496,20.868],[5.82343,20.98397],[5.23311,20.64145],[5.0,20.0],[5.0,5.0],[5.58579,3.58579],[7.0,3.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.15048,-0.17982],[0.2308,-0.0414],[0.20361,0.1163],[0.0,0.0],[0.34792,0.0],[0.30211,-0.17257],[0.0,0.0],[0.2308,0.0414],[0.15048,0.17982],[8e-05,0.23448],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[-8e-05,0.23448],[-0.15048,0.17982],[-0.2308,0.0414],[0.0,0.0],[-0.30211,-0.17257],[-0.34792,0.0],[0.0,0.0],[-0.20361,0.1163],[-0.2308,-0.0414],[-0.15048,-0.17982],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,3.0],[18.41421,3.58579],[19.0,5.0],[19.0,20.0],[18.76689,20.64145],[18.17657,20.98397],[17.504,20.868],[12.992,18.29],[12.0,18.02665],[11.008,18.29],[6.496,20.868],[5.82343,20.98397],[5.23311,20.64145],[5.0,20.0],[5.0,5.0],[5.58579,3.58579],[7.0,3.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.15048,-0.17982],[0.2308,-0.0414],[0.20361,0.1163],[0.0,0.0],[0.34792,0.0],[0.30211,-0.17257],[0.0,0.0],[0.2308,0.0414],[0.15048,0.17982],[8e-05,0.23448],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[-8e-05,0.23448],[-0.15048,0.17982],[-0.2308,0.0414],[0.0,0.0],[-0.30211,-0.17257],[-0.34792,0.0],[0.0,0.0],[-0.20361,0.1163],[-0.2308,-0.0414],[-0.15048,-0.17982],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[65],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[12,3]},"p":{"a":0,"k":[12,3]},"s":{"a":1,"k":[{"t":0,"s":[100.0,0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[100.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"bug","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,20.0],[12.0,11.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,7.0],[16.82843,8.17157],[18.0,11.0],[18.0,14.0],[16.24264,18.24264],[12.0,20.0],[7.75736,18.24264],[6.0,14.0],[6.0,11.0],[7.17157,8.17157],[10.0,7.0]],"i":[[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.0,0.0],[1.12479,-1.12479],[1.59069,0.0],[1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[-0.74986,0.74986],[-1.06046,0.0]],"o":[[1.06046,0.0],[0.74986,0.74986],[0.0,0.0],[0.0,1.59069],[-1.12479,1.12479],[-1.59069,0.0],[-1.12479,-1.12479],[0.0,0.0],[0.0,-1.06046],[0.74986,-0.74986],[0.0,0.0]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.12,3.88],[16.0,2.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[19.89638,18.23668],[17.19,17.0]],"i":[[0.0,0.0],[0.70929,0.74466],[1.02724,0.04885]],"o":[[0.00116,-1.0284],[-0.70929,-0.74466],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,5.0],[19.98175,7.66169],[17.45,8.97]],"i":[[0.0,0.0],[0.65449,-0.73193],[0.97564,-0.11046]],"o":[[-0.00113,0.98187],[-0.65449,0.73193],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,13.0],[18.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,21.0],[4.10362,18.23668],[6.81,17.0]],"i":[[0.0,0.0],[-0.70929,0.74466],[-1.02724,0.04885]],"o":[[-0.00116,-1.0284],[0.70929,-0.74466],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,5.0],[4.01825,7.66169],[6.55,8.97]],"i":[[0.0,0.0],[-0.65449,-0.73193],[-0.97564,-0.11046]],"o":[[0.00113,0.98187],[0.65449,0.73193],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,13.0],[2.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,2.0],[9.88,3.88]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,7.13],[9.0,6.0],[9.87868,3.87868],[12.0,3.0],[14.12132,3.87868],[15.0,6.0],[15.0,7.13]],"i":[[0.0,0.0],[0.0,0.0],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"calendar","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,2.0],[8.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,2.0],[16.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,9.0],[21.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"check","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,12.0],[9.0,17.0],[20.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":1,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[1],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-down","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,9.0],[12.0,15.0],[18.0,9.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-left","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,18.0],[9.0,12.0],[15.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"chevron-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[15.0,12.0],[9.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[98],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[90],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"chevron-up","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,15.0],[12.0,9.0],[6.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle-check","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,12.0],[10.5,14.5],[16.0,9.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"tm","s":{"a":0,"k":0},"e":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":1,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[1],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle-question-mark","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.09,9.0],[10.39995,7.40913],[12.42718,7.03871],[14.21508,8.06353],[14.92,10.0],[11.92,13.0]],"i":[[0.0,0.0],[-0.61065,0.35889],[-0.69811,-0.11974],[-0.45615,-0.54187],[0.00106,-0.70831],[0.0,0.0]],"o":[[0.23505,-0.66817],[0.61065,-0.35889],[0.69811,0.11974],[0.45615,0.54187],[0.0,2.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,17.0],[12.01,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"circle","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"clipboard","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,2.0],[15.0,2.0],[15.70711,2.29289],[16.0,3.0],[16.0,5.0],[15.70711,5.70711],[15.0,6.0],[9.0,6.0],[8.29289,5.70711],[8.0,5.0],[8.0,3.0],[8.29289,2.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,4.0],[18.0,4.0],[19.41421,4.58579],[20.0,6.0],[20.0,20.0],[19.41421,21.41421],[18.0,22.0],[6.0,22.0],[4.58579,21.41421],[4.0,20.0],[4.0,6.0],[4.58579,4.58579],[6.0,4.0],[8.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"copy","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,8.0],[20.0,8.0],[21.41421,8.58579],[22.0,10.0],[22.0,20.0],[21.41421,21.41421],[20.0,22.0],[10.0,22.0],[8.58579,21.41421],[8.0,20.0],[8.0,10.0],[8.58579,8.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,16.0],[2.0,14.0],[2.0,4.0],[4.0,2.0],[14.0,2.0],[16.0,4.0]],"i":[[0.0,0.0],[0.0,1.1],[0.0,0.0],[-1.1,0.0],[0.0,0.0],[0.0,-1.1]],"o":[[-1.1,0.0],[0.0,0.0],[0.0,-1.1],[0.0,0.0],[1.1,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.7,-1.7],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"diamond","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-4.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.7,10.3],[2.07548,11.38085],[2.07548,12.62915],[2.7,13.71],[10.29,21.3],[11.37085,21.92452],[12.61915,21.92452],[13.7,21.3],[21.29,13.71],[21.91452,12.62915],[21.91452,11.38085],[21.29,10.3],[13.7,2.71],[12.61915,2.08548],[11.37085,2.08548],[10.29,2.71]],"i":[[0.0,0.0],[0.10963,-0.40885],[-0.10963,-0.40885],[-0.29947,-0.29916],[0.0,0.0],[-0.40885,-0.10963],[-0.40885,0.10963],[-0.29916,0.29947],[0.0,0.0],[-0.10963,0.40885],[0.10963,0.40885],[0.29947,0.29916],[0.0,0.0],[0.40885,0.10963],[0.40885,-0.10963],[0.29916,-0.29947]],"o":[[-0.29947,0.29916],[-0.10963,0.40885],[0.10963,0.40885],[0.0,0.0],[0.29916,0.29947],[0.40885,0.10963],[0.40885,-0.10963],[0.0,0.0],[0.29947,-0.29916],[0.10963,-0.40885],[-0.10963,-0.40885],[0.0,0.0],[-0.29916,-0.29947],[-0.40885,-0.10963],[-0.40885,0.10963],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"download","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,15.0],[12.0,3.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,15.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[7.0,10.0],[12.0,15.0],[17.0,10.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"eraser","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[8.0,21.0],[7.23138,20.84831],[6.58,20.413],[2.586,16.414],[2.00043,15.0],[2.586,13.586],[12.586,3.586],[13.48273,3.06811],[14.51827,3.06811],[15.415,3.586],[21.414,9.586],[21.99957,11.0],[21.414,12.414],[12.834,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.2437,0.10074],[0.1863,0.18662],[0.0,0.0],[0.0,0.53013],[-0.3748,0.37491],[0.0,0.0],[-0.33917,0.0909],[-0.33917,-0.0909],[-0.24824,-0.24834],[0.0,0.0],[0.0,-0.53013],[0.3748,-0.37491],[0.0,0.0]],"o":[[0.0,0.0],[-0.2637,0.0006],[-0.2437,-0.10074],[0.0,0.0],[-0.3748,-0.37491],[0.0,-0.53013],[0.0,0.0],[0.24824,-0.24834],[0.33917,-0.0909],[0.33917,0.0909],[0.0,0.0],[0.3748,0.37491],[0.0,0.53013],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.082,11.09],[13.91,19.918]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"file-text","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,22.0],[4.58579,21.41421],[4.0,20.0],[4.0,4.0],[4.58579,2.58579],[6.0,2.0],[14.0,2.0],[14.92253,2.18277],[15.704,2.706],[19.292,6.294],[19.81669,7.07616],[20.0,8.0],[20.0,20.0],[19.41421,21.41421],[18.0,22.0]],"i":[[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.29244,-0.12116],[-0.22343,-0.22424],[0.0,0.0],[-0.12152,-0.29281],[0.00052,-0.31702],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.31655,-0.00051],[0.29244,0.12116],[0.0,0.0],[0.22484,0.2235],[0.12152,0.29281],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,2.0],[14.0,7.0],[14.29289,7.70711],[15.0,8.0],[20.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,9.0],[8.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,13.0],[8.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,17.0],[8.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"flame","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,3.0],[16.0,9.5],[19.0,15.0],[16.94975,19.94975],[12.0,22.0],[7.05025,19.94975],[5.0,15.0],[6.0,12.0],[6.73223,13.76777],[8.5,14.5],[10.26777,13.76777],[11.0,12.0],[9.5,7.0]],"i":[[-1.66667,1.33333],[-2.0,-1.66667],[0.0,-2.0],[1.31225,-1.31225],[1.8558,0.0],[1.31225,1.31225],[0.0,1.8558],[-0.649,0.86533],[-0.46866,-0.46866],[-0.66279,0.0],[-0.46866,0.46866],[0.0,0.66279],[0.0,2.0]],"o":[[0.66667,2.66667],[2.0,1.66667],[0.0,1.8558],[-1.31225,1.31225],[-1.8558,0.0],[-1.31225,-1.31225],[0.0,-1.08167],[0.0,0.66279],[0.46866,0.46866],[0.66279,0.0],[0.46866,-0.46866],[0.0,-2.0],[0.0,-1.33333]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"folder","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,20.0],[2.58579,19.41421],[2.0,18.0],[2.0,5.0],[2.58579,3.58579],[4.0,3.0],[7.93,3.0],[8.8785,3.2394],[9.6,3.9],[10.41,5.1],[11.1403,5.76538],[12.1,6.0],[18.0,6.0]],"i":[[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.29146,-0.15707],[-0.1821,-0.27651],[0.0,0.0],[-0.29523,-0.15722],[-0.33447,0.00328],[0.0,0.0]],"o":[[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.33109,5e-05],[0.29146,0.15707],[0.0,0.0],[0.18395,0.27936],[0.29523,0.15722],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[6.0,3.0],[7.93,3.0],[8.8785,3.2394],[9.6,3.9],[10.41,5.1],[11.1403,5.76538],[12.1,6.0],[20.0,6.0],[21.41421,6.58579],[22.0,8.0],[22.0,18.0],[21.41421,19.41421],[20.0,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.29146,-0.15707],[-0.1821,-0.27651],[0.0,0.0],[-0.29523,-0.15722],[-0.33447,0.00328],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.33109,5e-05],[0.29146,0.15707],[0.0,0.0],[0.18395,0.27936],[0.29523,0.15722],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[{"v":[[6.0,14.0],[7.5,11.1],[8.21761,10.30895],[9.24,10.0],[14.62,10.0],[20.0,10.0],[21.14376,10.35688],[21.87829,11.30345],[21.94,12.5],[20.4,18.5],[19.68292,19.58529],[18.45,20.0],[11.225,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.30646,0.19374],[-0.36247,0.0084],[-2.69,0.0],[0.0,0.0],[-0.33578,-0.23301],[-0.14234,-0.38312],[0.10218,-0.39573],[0.0,0.0],[0.35321,-0.2717],[0.44562,0.00301],[3.6125,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.16306,-0.32383],[0.30646,-0.19374],[0.0,0.0],[2.69,0.0],[0.40871,-0.00072],[0.33578,0.23301],[0.14234,0.38312],[0.0,0.0],[-0.1114,0.43148],[-0.35321,0.2717],[0.0,0.0],[-3.6125,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[{"v":[[6.0,14.0],[7.5,11.1],[8.21761,10.30895],[9.24,10.0],[14.62,10.0],[20.0,10.0],[21.14376,10.35688],[21.87829,11.30345],[21.94,12.5],[20.4,18.5],[19.68292,19.58529],[18.45,20.0],[11.225,20.0],[4.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.30646,0.19374],[-0.36247,0.0084],[-2.69,0.0],[0.0,0.0],[-0.33578,-0.23301],[-0.14234,-0.38312],[0.10218,-0.39573],[0.0,0.0],[0.35321,-0.2717],[0.44562,0.00301],[3.6125,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.16306,-0.32383],[0.30646,-0.19374],[0.0,0.0],[2.69,0.0],[0.40871,-0.00072],[0.33578,0.23301],[0.14234,0.38312],[0.0,0.0],[-0.1114,0.43148],[-0.35321,0.2717],[0.0,0.0],[-3.6125,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"tm","s":{"a":1,"k":[{"t":0,"s":[27.87664786438373],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":3,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"e":{"a":0,"k":100},"o":{"a":0,"k":0},"m":1},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,6.0],[19.41421,6.58579],[20.0,8.0],[20.0,10.0]],"i":[[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":3,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-branch","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,6.0],[8.63604,8.63604],[6.0,15.0],[6.0,3.0]],"i":[[0.0,0.0],[1.68718,-1.68718],[0.0,-2.38603],[0.0,0.0]],"o":[[-2.38603,0.0],[-1.68718,1.68718],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,6.0],[20.12132,8.12132],[18.0,9.0],[15.87868,8.12132],[15.0,6.0],[15.87868,3.87868],[18.0,3.0],[20.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[18.0,6.0]},"p":{"a":0,"k":[18.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[8.12132,20.12132],[6.0,21.0],[3.87868,20.12132],[3.0,18.0],[3.87868,15.87868],[6.0,15.0],[8.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[6.0,18.0]},"p":{"a":0,"k":[6.0,18.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":14.5,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-commit-horizontal","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[14.12132,14.12132],[12.0,15.0],[9.87868,14.12132],[9.0,12.0],[9.87868,9.87868],[12.0,9.0],[14.12132,9.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12.0,12.0]},"p":{"a":0,"k":[12.0,12.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12.3,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":16.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[9.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[21.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"git-fork","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,18.0],[14.12132,20.12132],[12.0,21.0],[9.87868,20.12132],[9.0,18.0],[9.87868,15.87868],[12.0,15.0],[14.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12.0,18.0]},"p":{"a":0,"k":[12.0,18.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12.3,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":16.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,6.0],[8.12132,8.12132],[6.0,9.0],[3.87868,8.12132],[3.0,6.0],[3.87868,3.87868],[6.0,3.0],[8.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[6.0,6.0]},"p":{"a":0,"k":[6.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,6.0],[20.12132,8.12132],[18.0,9.0],[15.87868,8.12132],[15.0,6.0],[15.87868,3.87868],[18.0,3.0],[20.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[18.0,6.0]},"p":{"a":0,"k":[18.0,6.0]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[128.8,128.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":14.5,"s":[81.856,81.856,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.5,"s":[106.2208,106.2208,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,9.0],[16.24264,13.24264],[12.0,15.0],[7.75736,13.24264],[6.0,9.0]],"i":[[0.0,0.0],[1.12479,-1.12479],[1.59069,0.0],[1.12479,1.12479],[0.0,1.59069]],"o":[[0.0,1.59069],[-1.12479,1.12479],[-1.59069,0.0],[-1.12479,-1.12479],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"grid-3x3","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,9.0],[21.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,15.0],[21.0,15.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,3.0],[9.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.8,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[15.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.8,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"hand","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,11.0],[18.0,6.0],[17.41421,4.58579],[16.0,4.0],[14.58579,4.58579],[14.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,10.0],[14.0,4.0],[13.41421,2.58579],[12.0,2.0],[10.58579,2.58579],[10.0,4.0],[10.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,10.5],[10.0,6.0],[9.41421,4.58579],[8.0,4.0],[6.58579,4.58579],[6.0,6.0],[6.0,14.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,8.0],[18.58579,6.58579],[20.0,6.0],[21.41421,6.58579],[22.0,8.0],[22.0,14.0],[19.65685,19.65685],[14.0,22.0],[12.0,22.0],[6.01,19.66],[2.41,16.06],[1.89512,14.66694],[2.48272,13.30296],[3.84877,12.7202],[5.24,13.24],[7.0,15.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[1.49972,-1.49972],[2.12092,0.0],[0.0,0.0],[1.49,1.48],[0.0,0.0],[-0.01353,0.51305],[-0.36355,0.36227],[-0.5131,0.01172],[-0.37971,-0.34529],[0.0,0.0]],"o":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,2.12092],[-1.49972,1.49972],[0.0,0.0],[-2.8,0.0],[0.0,0.0],[-0.34395,-0.38093],[0.01353,-0.51305],[0.36355,-0.36227],[0.5131,-0.01172],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"highlighter","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,11.0],[3.0,17.0],[3.0,20.0],[12.0,20.0],[15.0,17.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[17.4,16.6],[16.0,17.17171],[14.6,16.6],[9.4,11.4],[8.82829,10.0],[9.4,8.6],[14.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[0.52331,0.0],[0.37372,0.36632],[0.0,0.0],[0.0,0.52331],[-0.36632,0.37372],[0.0,0.0]],"o":[[0.0,0.0],[-0.37372,0.36632],[-0.52331,0.0],[0.0,0.0],[-0.36632,-0.37372],[0.0,-0.52331],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"image","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.0,9.0],[10.41421,10.41421],[9.0,11.0],[7.58579,10.41421],[7.0,9.0],[7.58579,7.58579],[9.0,7.0],[10.41421,7.58579]],"i":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493]],"o":[[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[21.0,15.0],[17.914,11.914],[16.5,11.32843],[15.086,11.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[{"v":[[21.0,15.0],[17.914,13.914],[16.5,13.32843],[15.086,13.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[{"v":[[21.0,15.0],[17.914,11.914],[16.5,11.32843],[15.086,11.914],[6.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.53013,0.0],[0.37491,-0.3748],[0.0,0.0]],"o":[[0.0,0.0],[-0.37491,-0.3748],[-0.53013,0.0],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"toggle":["folder","chevron-right","panel-left","panel-right","star","bookmark","lock","sparkles","maximize"],"oneshot":["search","settings","plus","x","check","copy","trash-2","file-text","tag","layers","git-branch","link","list","download","upload","pencil","pen","eraser","hand","mouse-pointer-2","type","square","circle","diamond","move-up-right","slash","image","calendar","clipboard","quote","info","bug","triangle-alert","flame","zap","git-fork","git-commit-horizontal","undo-2","refresh-cw","notebook-pen","layout-dashboard","circle-check","circle-question-mark","bold","italic","strikethrough","highlighter","scissors","message-square-quote","arrow-up","arrow-down","chevron-up","chevron-down","chevron-left","grid-3x3"]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"info","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,12.0],[19.07107,19.07107],[12.0,22.0],[4.92893,19.07107],[2.0,12.0],[4.92893,4.92893],[12.0,2.0],[19.07107,4.92893]],"i":[[0.0,-2.65115],[1.87464,-1.87464],[2.65115,0.0],[1.87464,1.87464],[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464]],"o":[[0.0,2.65115],[-1.87464,1.87464],[-2.65115,0.0],[-1.87464,-1.87464],[-0.0,-2.65115],[1.87464,-1.87464],[2.65115,-0.0],[1.87464,1.87464]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,16.0],[12.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,8.0],[12.01,8.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"italic","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,4.0],[10.0,4.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,20.0],[5.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,4.0],[9.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"layers","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.83,2.18],[12.0,1.99964],[11.17,2.18],[2.6,6.08],[2.07672,6.61928],[2.07672,7.37072],[2.6,7.91],[11.18,11.82],[12.01,12.00036],[12.84,11.82],[21.42,7.92],[21.94328,7.38072],[21.94328,6.62928],[21.42,6.09]],"i":[[0.0,0.0],[0.28638,0.0],[0.26055,-0.11885],[0.0,0.0],[0.09765,-0.24087],[-0.09765,-0.24087],[-0.23782,-0.10486],[0.0,0.0],[-0.28638,0.0],[-0.26055,0.11885],[0.0,0.0],[-0.09765,0.24087],[0.09765,0.24087],[0.23782,0.10486]],"o":[[-0.26055,-0.11885],[-0.28638,0.0],[0.0,0.0],[-0.23782,0.10486],[-0.09765,0.24087],[0.09765,0.24087],[0.0,0.0],[0.26055,0.11885],[0.28638,0.0],[0.0,0.0],[0.23782,-0.10486],[0.09765,-0.24087],[-0.09765,-0.24087],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,12.0],[2.15672,12.53995],[2.58,12.91],[11.18,16.82],[12.005,16.99808],[12.83,16.82],[21.41,12.92],[21.8418,12.54773],[22.0,12.0]],"i":[[0.0,0.0],[-0.10279,-0.16128],[-0.17356,-0.08032],[0.0,0.0],[-0.28453,0.0],[-0.25919,0.11737],[0.0,0.0],[-0.10475,0.16334],[0.00153,0.19404]],"o":[[-0.00047,0.19125],[0.10279,0.16128],[0.0,0.0],[0.25919,0.11737],[0.28453,0.0],[0.0,0.0],[0.17699,-0.07955],[0.10475,-0.16334],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,17.0],[2.15672,17.53995],[2.58,17.91],[11.18,21.82],[12.005,21.99808],[12.83,21.82],[21.41,17.92],[21.8418,17.54773],[22.0,17.0]],"i":[[0.0,0.0],[-0.10279,-0.16128],[-0.17356,-0.08032],[0.0,0.0],[-0.28453,0.0],[-0.25919,0.11737],[0.0,0.0],[-0.10475,0.16334],[0.00153,0.19404]],"o":[[-0.00047,0.19125],[0.10279,0.16128],[0.0,0.0],[0.25919,0.11737],[0.28453,0.0],[0.0,0.0],[0.17699,-0.07955],[0.10475,-0.16334],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"layout-dashboard","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,3.0],[9.0,3.0],[9.70711,3.29289],[10.0,4.0],[10.0,11.0],[9.70711,11.70711],[9.0,12.0],[4.0,12.0],[3.29289,11.70711],[3.0,11.0],[3.0,4.0],[3.29289,3.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[20.0,3.0],[20.70711,3.29289],[21.0,4.0],[21.0,7.0],[20.70711,7.70711],[20.0,8.0],[15.0,8.0],[14.29289,7.70711],[14.0,7.0],[14.0,4.0],[14.29289,3.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[20.0,12.0],[20.70711,12.29289],[21.0,13.0],[21.0,20.0],[20.70711,20.70711],[20.0,21.0],[15.0,21.0],[14.29289,20.70711],[14.0,20.0],[14.0,13.0],[14.29289,12.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,16.0],[9.0,16.0],[9.70711,16.29289],[10.0,17.0],[10.0,20.0],[9.70711,20.70711],[9.0,21.0],[4.0,21.0],[3.29289,20.70711],[3.0,20.0],[3.0,17.0],[3.29289,16.29289]],"i":[[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.18746,-0.18746],[0.26511,0.0],[0.0,0.0],[0.18746,0.18746],[0.0,0.26511],[0.0,0.0],[-0.18746,0.18746]],"o":[[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[-0.18746,0.18746],[0.0,0.0],[-0.26511,0.0],[-0.18746,-0.18746],[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"link","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,13.0],[12.25562,14.68953],[15.06663,14.89085],[17.54,13.54],[20.54,10.54],[21.94337,7.02299],[20.47909,3.53091],[16.98701,2.06663],[13.47,3.47],[11.75,5.18]],"i":[[0.0,0.0],[-0.89822,-0.33521],[-0.93683,0.20379],[-0.67781,0.67805],[0.0,0.0],[0.01139,1.3105],[0.9267,0.9267],[1.3105,0.01139],[0.94267,-0.91046],[0.0,0.0]],"o":[[0.57426,0.76772],[0.89822,0.33521],[0.93683,-0.20379],[0.0,0.0],[0.91046,-0.94267],[-0.01139,-1.3105],[-0.9267,-0.9267],[-1.3105,-0.01139],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.6,-1.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,11.0],[11.74438,9.31047],[8.93337,9.10915],[6.46,10.46],[3.46,13.46],[2.05663,16.97701],[3.52091,20.46909],[7.01299,21.93337],[10.53,20.53],[12.24,18.82]],"i":[[0.0,0.0],[0.89822,0.33521],[0.93683,-0.20379],[0.67781,-0.67805],[0.0,0.0],[-0.01139,-1.3105],[-0.9267,-0.9267],[-1.3105,-0.01139],[-0.94267,0.91046],[0.0,0.0]],"o":[[-0.57426,-0.76772],[-0.89822,-0.33521],[-0.93683,0.20379],[0.0,0.0],[-0.91046,0.94267],[0.01139,1.3105],[0.9267,0.9267],[1.3105,0.01139],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,1.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"list","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,5.0],[3.01,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[3.01,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,19.0],[3.01,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,5.0],[21.0,5.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,12.0],[21.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.6,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,19.0],[21.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"lock","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":10,"s":[0,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,11.0],[19.0,11.0],[20.41421,11.58579],[21.0,13.0],[21.0,20.0],[20.41421,21.41421],[19.0,22.0],[5.0,22.0],[3.58579,21.41421],[3.0,20.0],[3.0,13.0],[3.58579,11.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":1,"k":[{"t":0,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.28937,3.64367],[11.4975,2.02029],[14.96547,2.96931],[16.9,6.0],[16.9,6.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.83085,0.91993],[-1.23331,0.12458],[-0.99803,-0.73519],[-0.24667,-1.2148],[0,0]],"o":[[0.0,0.0],[-0.00125,-1.23959],[0.83085,-0.91993],[1.23331,-0.12458],[0.99803,0.73519],[0.0,0.0],[0,0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.46447,3.46447],[12.0,2.0],[15.53553,3.46447],[17.0,7.0],[17.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.93732,0.93732],[-1.32557,0.0],[-0.93732,-0.93732],[0.0,-1.32557],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-1.32557],[0.93732,-0.93732],[1.32557,-0.0],[0.93732,0.93732],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[{"v":[[7.0,11.0],[7.0,7.0],[8.46447,3.46447],[12.0,2.0],[15.53553,3.46447],[17.0,7.0],[17.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.93732,0.93732],[-1.32557,0.0],[-0.93732,-0.93732],[0.0,-1.32557],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-1.32557],[0.93732,-0.93732],[1.32557,-0.0],[0.93732,0.93732],[0.0,0.0],[0.0,0.0]],"c":false}],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"maximize","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,3.0],[5.0,3.0],[3.58579,3.58579],[3.0,5.0],[3.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.875,-1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,8.0],[21.0,5.0],[20.41421,3.58579],[19.0,3.0],[16.0,3.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.875,-1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[1.5,-1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,16.0],[3.0,19.0],[3.58579,20.41421],[5.0,21.0],[8.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-1.875,1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,21.0],[19.0,21.0],[20.41421,20.41421],[21.0,19.0],[21.0,16.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.875,1.875],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[1.5,1.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"message-square-quote","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,14.0],[15.41421,13.41421],[16.0,12.0],[16.0,8.0],[14.0,8.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,17.0],[21.41421,18.41421],[20.0,19.0],[6.828,19.0],[5.414,19.586],[3.212,21.788],[2.70999,21.99591],[2.20798,21.78798],[2.0,21.286],[2.0,5.0],[2.58579,3.58579],[4.0,3.0],[20.0,3.0],[21.41421,3.58579],[22.0,5.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37484,-0.37495],[0.0,0.0],[0.18821,0.0],[0.13309,0.13308],[2e-05,0.18821],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023]],"o":[[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53019,0.00011],[0.0,0.0],[-0.1331,0.13307],[-0.18821,-0.0],[-0.13309,-0.13308],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,14.0],[9.41421,13.41421],[10.0,12.0],[10.0,8.0],[8.0,8.0]],"i":[[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[0.0,0.0]],"o":[[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"mouse-pointer-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.037,4.688],[4.00494,4.39856],[4.14118,4.14118],[4.39856,4.00494],[4.688,4.037],[20.688,10.537],[20.92331,10.73498],[20.99825,11.03324],[20.88446,11.31893],[20.625,11.484],[14.501,13.064],[13.58623,13.58533],[13.063,14.499],[11.484,20.625],[11.31893,20.88446],[11.03324,20.99825],[10.73498,20.92331],[10.537,20.688]],"i":[[0.0,0.0],[-0.01858,0.0975],[-0.07018,0.07018],[-0.0975,0.01858],[-0.09107,-0.03946],[0.0,0.0],[-0.05568,-0.08906],[0.00697,-0.1048],[0.06699,-0.0809],[0.10167,-0.0264],[0.0,0.0],[0.25287,-0.25234],[0.08967,-0.3458],[0.0,0.0],[0.0809,-0.06699],[0.1048,-0.00697],[0.08906,0.05568],[0.03963,0.09727]],"o":[[-0.03946,-0.09107],[0.01858,-0.0975],[0.07018,-0.07018],[0.0975,-0.01858],[0.0,0.0],[0.09727,0.03963],[0.05568,0.08906],[-0.00697,0.1048],[-0.06699,0.0809],[0.0,0.0],[-0.34598,0.08895],[-0.25287,0.25234],[0.0,0.0],[-0.0264,0.10167],[-0.0809,0.06699],[-0.1048,0.00697],[-0.08906,-0.05568],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"move-up-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[1.8,-1.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[13.0,5.0],[19.0,5.0],[19.0,11.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,5.0],[5.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"notebook-pen","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[13.4,2.0],[6.0,2.0],[4.58579,2.58579],[4.0,4.0],[4.0,20.0],[4.58579,21.41421],[6.0,22.0],[18.0,22.0],[19.41421,21.41421],[20.0,20.0],[20.0,12.6]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,6.0],[6.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,10.0],[6.0,10.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,14.0],[6.0,14.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[2.0,18.0],[6.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.378,5.626],[22.00015,4.124],[21.378,2.622],[19.876,1.99985],[18.374,2.622],[13.364,7.634],[12.858,8.488],[12.021,11.358],[12.04631,11.70598],[12.29302,11.95269],[12.641,11.978],[15.511,11.141],[16.365,10.635]],"i":[[0.0,0.0],[0.0,0.56314],[0.3982,0.3982],[0.56314,0.0],[0.3982,-0.3982],[0.0,0.0],[0.09421,-0.32265],[0.0,0.0],[-0.04993,-0.10916],[-0.10916,-0.04993],[-0.11524,0.03361],[0.0,0.0],[-0.23761,0.23774]],"o":[[0.3982,-0.3982],[0.0,-0.56314],[-0.3982,-0.3982],[-0.56314,0.0],[0.0,0.0],[-0.23774,0.23761],[0.0,0.0],[-0.03361,0.11524],[0.04993,0.10916],[0.10916,0.04993],[0.0,0.0],[0.32265,-0.09421],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"panel-left","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,3.0],[9.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[-4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[-4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,4.0],[5.0,4.0],[5.0,20.0],[3.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"panel-right","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,3.0],[15.0,21.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[4,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,4.0],[21.0,4.0],[21.0,20.0],[19.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[32],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"pen","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.174,6.812],[21.99988,4.81885],[21.1745,2.8255],[19.18135,1.99962],[17.188,2.825],[3.842,16.174],[3.342,17.004],[2.021,21.356],[2.04503,21.70639],[2.29357,21.95453],[2.644,21.978],[6.997,20.658],[7.827,20.161]],"i":[[0.0,0.0],[-9e-05,0.74733],[0.52837,0.52851],[0.74733,9e-05],[0.52851,-0.52837],[0.0,0.0],[0.09611,-0.31345],[0.0,0.0],[-0.0501,-0.11002],[-0.1101,-0.04993],[-0.11577,0.0348],[0.0,0.0],[-0.23181,0.23108]],"o":[[0.52851,-0.52837],[9e-05,-0.74733],[-0.52837,-0.52851],[-0.74733,-9e-05],[0.0,0.0],[-0.23217,0.23149],[0.0,0.0],[-0.03461,0.11583],[0.0501,0.11002],[0.1101,0.04993],[0.0,0.0],[0.31315,-0.09524],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"pencil","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.174,6.812],[21.99988,4.81885],[21.1745,2.8255],[19.18135,1.99962],[17.188,2.825],[3.842,16.174],[3.342,17.004],[2.021,21.356],[2.04503,21.70639],[2.29357,21.95453],[2.644,21.978],[6.997,20.658],[7.827,20.161]],"i":[[0.0,0.0],[-9e-05,0.74733],[0.52837,0.52851],[0.74733,9e-05],[0.52851,-0.52837],[0.0,0.0],[0.09611,-0.31345],[0.0,0.0],[-0.0501,-0.11002],[-0.1101,-0.04993],[-0.11577,0.0348],[0.0,0.0],[-0.23181,0.23108]],"o":[[0.52851,-0.52837],[9e-05,-0.74733],[-0.52837,-0.52851],[-0.74733,-9e-05],[0.0,0.0],[-0.23217,0.23149],[0.0,0.0],[-0.03461,0.11583],[0.0501,0.11002],[0.1101,0.04993],[0.0,0.0],[0.31315,-0.09524],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,5.0],[19.0,9.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":1,"k":[{"t":0,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[10.4,13.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[12,12],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-3.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"plus","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":8,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":14,"s":[-7],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":20,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,12.0],[19.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,5.0],[12.0,19.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"quote","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,3.0],[14.58579,3.58579],[14.0,5.0],[14.0,11.0],[14.58579,12.41421],[16.0,13.0],[16.70711,13.29289],[17.0,14.0],[17.0,15.0],[16.41421,16.41421],[15.0,17.0],[14.29289,17.29289],[14.0,18.0],[14.0,20.0],[14.29289,20.70711],[15.0,21.0],[19.24264,19.24264],[21.0,15.0],[21.0,5.0],[20.41421,3.58579],[19.0,3.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[-1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[-0.26511,0.0],[-0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[1.59069,0.0],[1.12479,-1.12479],[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[3.58579,3.58579],[3.0,5.0],[3.0,11.0],[3.58579,12.41421],[5.0,13.0],[5.70711,13.29289],[6.0,14.0],[6.0,15.0],[5.41421,16.41421],[4.0,17.0],[3.29289,17.29289],[3.0,18.0],[3.0,20.0],[3.29289,20.70711],[4.0,21.0],[8.24264,19.24264],[10.0,15.0],[10.0,5.0],[9.41421,3.58579],[8.0,3.0]],"i":[[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37493,-0.37493],[-0.53023,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0],[-0.18746,-0.18746],[-0.26511,0.0],[-1.12479,1.12479],[0.0,1.59069],[0.0,0.0],[0.37493,0.37493],[0.53023,0.0]],"o":[[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[0.37493,0.37493],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[-0.26511,0.0],[-0.18746,0.18746],[0.0,0.0],[0.0,0.26511],[0.18746,0.18746],[1.59069,0.0],[1.12479,-1.12479],[0.0,0.0],[0.0,-0.53023],[-0.37493,-0.37493],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"refresh-cw","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[360],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,12.0],[5.63604,5.63604],[12.0,3.0],[18.74,5.74],[21.0,8.0]],"i":[[0.0,0.0],[-1.68718,1.68718],[-2.38603,0.0],[-1.80835,-1.74817],[0.0,0.0]],"o":[[-0.0,-2.38603],[1.68718,-1.68718],[2.51518,0.00946],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,3.0],[21.0,8.0],[16.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,12.0],[18.36396,18.36396],[12.0,21.0],[5.26,18.26],[3.0,16.0]],"i":[[0.0,0.0],[1.68718,-1.68718],[2.38603,0.0],[1.80835,1.74817],[0.0,0.0]],"o":[[0.0,2.38603],[-1.68718,1.68718],[-2.51518,-0.00946],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,16.0],[3.0,16.0],[3.0,21.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"scissors","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,6.0],[8.12132,8.12132],[6.0,9.0],[3.87868,8.12132],[3.0,6.0],[3.87868,3.87868],[6.0,3.0],[8.12132,3.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.12,8.12],[12.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[20.0,4.0],[8.12,15.88]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,18.0],[8.12132,20.12132],[6.0,21.0],[3.87868,20.12132],[3.0,18.0],[3.87868,15.87868],[6.0,15.0],[8.12132,15.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.8,14.8],[20.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[16],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"search","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,21.0],[16.66,16.66]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,11.0],[16.65685,16.65685],[11.0,19.0],[5.34315,16.65685],[3.0,11.0],[5.34315,5.34315],[11.0,3.0],[16.65685,5.34315]],"i":[[0.0,-2.12092],[1.49972,-1.49972],[2.12092,0.0],[1.49972,1.49972],[0.0,2.12092],[-1.49972,1.49972],[-2.12092,0.0],[-1.49972,-1.49972]],"o":[[0.0,2.12092],[-1.49972,1.49972],[-2.12092,0.0],[-1.49972,-1.49972],[-0.0,-2.12092],[1.49972,-1.49972],[2.12092,-0.0],[1.49972,1.49972]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[11,11]},"p":{"a":1,"k":[{"t":0,"s":[11,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[9.2,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[11,11],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[110.0,110.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[96.5,96.5,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.2,101.2,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"settings","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[45],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.671,4.136],[10.4261,2.62628],[12.0005,2.01743],[13.5749,2.62628],[14.33,4.136],[14.91364,5.48635],[16.18784,6.22154],[17.649,6.051],[19.331,5.95349],[20.64252,7.0111],[20.90364,8.67557],[19.979,10.084],[19.10158,11.26419],[19.10158,12.73481],[19.979,13.915],[20.90364,15.32343],[20.64252,16.9879],[19.331,18.04551],[17.649,17.948],[16.18784,17.77746],[14.91364,18.51265],[14.33,19.863],[13.5749,21.37272],[12.0005,21.98157],[10.4261,21.37272],[9.671,19.863],[9.08728,18.51216],[7.81258,17.7769],[6.351,17.948],[4.669,18.04551],[3.35748,16.9879],[3.09636,15.32343],[4.021,13.915],[4.89842,12.73481],[4.89842,11.26419],[4.021,10.084],[3.0979,8.67598],[3.35898,7.01271],[4.66909,5.95524],[6.35,6.051],[7.81116,6.22154],[9.08536,5.48635],[9.669,4.136]],"i":[[0.0,0.0],[-0.43064,0.39165],[-0.5821,-0.0],[-0.43064,-0.39165],[-0.05508,-0.57949],[-0.3346,-0.37561],[-0.49264,-0.10169],[-0.45598,0.21241],[-0.55316,-0.17741],[-0.2906,-0.50301],[0.12261,-0.56783],[0.47226,-0.33828],[0.15802,-0.47739],[-0.15802,-0.47739],[-0.41164,-0.28883],[-0.12261,-0.56783],[0.2906,-0.50301],[0.55316,-0.17741],[0.52895,0.24015],[0.49264,-0.10169],[0.3346,-0.37561],[0.04432,-0.50107],[0.43064,-0.39165],[0.5821,0.0],[0.43064,0.39165],[0.05508,0.57949],[0.33472,0.37573],[0.49283,0.10161],[0.45604,-0.21269],[0.55316,0.17741],[0.2906,0.50301],[-0.12261,0.56783],[-0.47226,0.33828],[-0.15802,0.47739],[0.15802,0.47739],[0.41164,0.28883],[0.12231,0.56745],[-0.29029,0.50268],[-0.55261,0.17768],[-0.52886,-0.23929],[-0.49264,0.10169],[-0.3346,0.37561],[-0.04432,0.50107]],"o":[[0.05508,-0.57949],[0.43064,-0.39165],[0.5821,0.0],[0.43064,0.39165],[0.04432,0.50107],[0.3346,0.37561],[0.49264,0.10169],[0.52895,-0.24015],[0.55316,0.17741],[0.2906,0.50301],[-0.12261,0.56783],[-0.41164,0.28883],[-0.15802,0.47739],[0.15802,0.47739],[0.47226,0.33828],[0.12261,0.56783],[-0.2906,0.50301],[-0.55316,0.17741],[-0.45598,-0.21241],[-0.49264,0.10169],[-0.3346,0.37561],[-0.05508,0.57949],[-0.43064,0.39165],[-0.5821,0.0],[-0.43064,-0.39165],[-0.04423,-0.50125],[-0.33472,-0.37573],[-0.49283,-0.10161],[-0.52895,0.24015],[-0.55316,-0.17741],[-0.2906,-0.50301],[0.12261,-0.56783],[0.41164,-0.28883],[0.15802,-0.47739],[-0.15802,-0.47739],[-0.4716,-0.33845],[-0.12231,-0.56745],[0.29029,-0.50268],[0.55261,-0.17768],[0.45598,0.21241],[0.49264,-0.10169],[0.3346,-0.37561],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[15.0,12.0],[14.12132,14.12132],[12.0,15.0],[9.87868,14.12132],[9.0,12.0],[9.87868,9.87868],[12.0,9.0],[14.12132,9.87868]],"i":[[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239],[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239]],"o":[[0.0,0.79534],[-0.56239,0.56239],[-0.79534,0.0],[-0.56239,-0.56239],[0.0,-0.79534],[0.56239,-0.56239],[0.79534,0.0],[0.56239,0.56239]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"slash","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,2.0],[2.0,22.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"sparkles","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.017,2.814],[11.3611,2.22832],[12.0,1.99761],[12.6389,2.22832],[12.983,2.814],[14.034,8.372],[14.58503,9.41497],[15.628,9.966],[21.186,11.017],[21.77168,11.3611],[22.00239,12.0],[21.77168,12.6389],[21.186,12.983],[15.628,14.034],[14.58503,14.58503],[14.034,15.628],[12.983,21.186],[12.6389,21.77168],[12.0,22.00239],[11.3611,21.77168],[11.017,21.186],[9.966,15.628],[9.41497,14.58503],[8.372,14.034],[2.814,12.983],[2.22832,12.6389],[1.99761,12.0],[2.22832,11.3611],[2.814,11.017],[8.372,9.966],[9.41497,9.41497],[9.966,8.372]],"i":[[0.0,0.0],[-0.17948,0.14906],[-0.23331,0.0],[-0.17948,-0.14906],[-0.04284,-0.22934],[0.0,0.0],[-0.28432,-0.28432],[-0.3951,-0.07464],[0.0,0.0],[-0.14906,-0.17948],[0.0,-0.23331],[0.14906,-0.17948],[0.22934,-0.04284],[0.0,0.0],[0.28432,-0.28432],[0.07464,-0.3951],[0.0,0.0],[0.17948,-0.14906],[0.23331,0.0],[0.17948,0.14906],[0.04284,0.22934],[0.0,0.0],[0.28432,0.28432],[0.3951,0.07464],[0.0,0.0],[0.14906,0.17948],[0.0,0.23331],[-0.14906,0.17948],[-0.22934,0.04284],[0.0,0.0],[-0.28432,0.28432],[-0.07464,0.3951]],"o":[[0.04284,-0.22934],[0.17948,-0.14906],[0.23331,0.0],[0.17948,0.14906],[0.0,0.0],[0.07464,0.3951],[0.28432,0.28432],[0.0,0.0],[0.22934,0.04284],[0.14906,0.17948],[0.0,0.23331],[-0.14906,0.17948],[0.0,0.0],[-0.3951,0.07464],[-0.28432,0.28432],[0.0,0.0],[-0.04284,0.22934],[-0.17948,0.14906],[-0.23331,0.0],[-0.17948,-0.14906],[0.0,0.0],[-0.07464,-0.3951],[-0.28432,-0.28432],[0.0,0.0],[-0.22934,-0.04284],[-0.14906,-0.17948],[0.0,-0.23331],[0.14906,-0.17948],[0.0,0.0],[0.3951,-0.07464],[0.28432,-0.28432],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":2,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":5,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[20.0,2.0],[20.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[22.0,4.0],[18.0,4.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[20,4]},"p":{"a":0,"k":[20,4]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":7,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,20.0],[5.41421,21.41421],[4.0,22.0],[2.58579,21.41421],[2.0,20.0],[2.58579,18.58579],[4.0,18.0],[5.41421,18.58579]],"i":[[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493],[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493]],"o":[[0.0,0.53023],[-0.37493,0.37493],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.37493,-0.37493],[0.53023,0.0],[0.37493,0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[4,20]},"p":{"a":0,"k":[4,20]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[62.5,62.5],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":9,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"square","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[5.0,3.0],[19.0,3.0],[20.41421,3.58579],[21.0,5.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,5.0],[3.58579,3.58579]],"i":[[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0],[-0.37493,0.37493]],"o":[[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":12,"w":24,"h":24,"nm":"star","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.525,2.295],[11.80815,2.03605],[12.19185,2.03605],[12.475,2.295],[14.785,6.974],[15.43962,7.75045],[16.38,8.134],[21.546,8.89],[21.88036,9.0791],[21.99916,9.4444],[21.84,9.794],[18.104,13.432],[17.56683,14.29563],[17.493,15.31],[18.375,20.45],[18.29924,20.82824],[17.98713,21.05494],[17.604,21.01],[12.986,18.582],[11.9995,18.33875],[11.013,18.582],[6.396,21.01],[6.01336,21.0542],[5.70185,20.82764],[5.626,20.45],[6.507,15.311],[6.43354,14.29605],[5.896,13.432],[2.16,9.795],[1.9991,9.44472],[2.11808,9.07807],[2.454,8.889],[7.619,8.134],[8.56058,7.75099],[9.216,6.974]],"i":[[0.0,0.0],[-0.12337,0.04791],[-0.12337,-0.04791],[-0.05871,-0.11862],[0.0,0.0],[-0.2778,-0.20203],[-0.33985,-0.04988],[0.0,0.0],[-0.08386,-0.10259],[0.00747,-0.1323],[0.09487,-0.0925],[0.0,0.0],[0.10643,-0.32713],[-0.05794,-0.33909],[0.0,0.0],[0.07185,-0.11205],[0.12878,-0.03367],[0.11749,0.06256],[0.0,0.0],[0.34366,0.0],[0.30427,-0.15977],[0.0,0.0],[0.12854,0.03377],[0.07173,0.11188],[-0.02297,0.1309],[0.0,0.0],[0.10644,0.32733],[0.2466,0.24014],[0.0,0.0],[0.00776,0.13278],[-0.08425,0.10292],[-0.13169,0.01862],[0.0,0.0],[-0.27818,0.20206],[-0.15229,0.30825]],"o":[[0.05871,-0.11862],[0.12337,-0.04791],[0.12337,0.04791],[0.0,0.0],[0.15217,0.30795],[0.2778,0.20203],[0.0,0.0],[0.13114,0.019],[0.08386,0.10259],[-0.00747,0.1323],[0.0,0.0],[-0.24637,0.24009],[-0.10643,0.32713],[0.0,0.0],[0.02315,0.13108],[-0.07185,0.11205],[-0.12878,0.03367],[0.0,0.0],[-0.30427,-0.15977],[-0.34366,0.0],[0.0,0.0],[-0.11745,0.06218],[-0.12854,-0.03377],[-0.07173,-0.11188],[0.0,0.0],[0.05819,-0.33925],[-0.10644,-0.32733],[0.0,0.0],[-0.09567,-0.0924],[-0.00776,-0.13278],[0.08425,-0.10292],[0.0,0.0],[0.34024,-0.0495],[0.27818,-0.20206],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[11.525,2.295],[11.80815,2.03605],[12.19185,2.03605],[12.475,2.295],[14.785,6.974],[15.43962,7.75045],[16.38,8.134],[21.546,8.89],[21.88036,9.0791],[21.99916,9.4444],[21.84,9.794],[18.104,13.432],[17.56683,14.29563],[17.493,15.31],[18.375,20.45],[18.29924,20.82824],[17.98713,21.05494],[17.604,21.01],[12.986,18.582],[11.9995,18.33875],[11.013,18.582],[6.396,21.01],[6.01336,21.0542],[5.70185,20.82764],[5.626,20.45],[6.507,15.311],[6.43354,14.29605],[5.896,13.432],[2.16,9.795],[1.9991,9.44472],[2.11808,9.07807],[2.454,8.889],[7.619,8.134],[8.56058,7.75099],[9.216,6.974]],"i":[[0.0,0.0],[-0.12337,0.04791],[-0.12337,-0.04791],[-0.05871,-0.11862],[0.0,0.0],[-0.2778,-0.20203],[-0.33985,-0.04988],[0.0,0.0],[-0.08386,-0.10259],[0.00747,-0.1323],[0.09487,-0.0925],[0.0,0.0],[0.10643,-0.32713],[-0.05794,-0.33909],[0.0,0.0],[0.07185,-0.11205],[0.12878,-0.03367],[0.11749,0.06256],[0.0,0.0],[0.34366,0.0],[0.30427,-0.15977],[0.0,0.0],[0.12854,0.03377],[0.07173,0.11188],[-0.02297,0.1309],[0.0,0.0],[0.10644,0.32733],[0.2466,0.24014],[0.0,0.0],[0.00776,0.13278],[-0.08425,0.10292],[-0.13169,0.01862],[0.0,0.0],[-0.27818,0.20206],[-0.15229,0.30825]],"o":[[0.05871,-0.11862],[0.12337,-0.04791],[0.12337,0.04791],[0.0,0.0],[0.15217,0.30795],[0.2778,0.20203],[0.0,0.0],[0.13114,0.019],[0.08386,0.10259],[-0.00747,0.1323],[0.0,0.0],[-0.24637,0.24009],[-0.10643,0.32713],[0.0,0.0],[0.02315,0.13108],[-0.07185,0.11205],[-0.12878,0.03367],[0.0,0.0],[-0.30427,-0.15977],[-0.34366,0.0],[0.0,0.0],[-0.11745,0.06218],[-0.12854,-0.03377],[-0.07173,-0.11188],[0.0,0.0],[0.05819,-0.33925],[-0.10644,-0.32733],[0.0,0.0],[-0.09567,-0.0924],[-0.00776,-0.13278],[0.08425,-0.10292],[0.0,0.0],[0.34024,-0.0495],[0.27818,-0.20206],[0.0,0.0]],"c":true}}},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":4,"s":[65],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":1},{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[0.0,0.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[115.0,115.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":12,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":12,"st":0}],"markers":[{"cm":"off","tm":0,"dr":0},{"cm":"on","tm":12,"dr":0}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"strikethrough","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[16.0,4.0],[9.0,4.0],[7.21521,4.58751],[6.12996,6.12142],[6.17,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.51659,-0.38184],[0.18813,-0.61422],[-0.21413,-0.60565]],"o":[[0.0,0.0],[-0.64239,-0.00034],[-0.51659,0.38184],[-0.18813,0.61422],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,12.0],[16.82843,13.17157],[18.0,16.0],[16.82843,18.82843],[14.0,20.0],[6.0,20.0]],"i":[[0.0,0.0],[-0.74986,-0.74986],[0.0,-1.06046],[0.74986,-0.74986],[1.06046,0.0],[0.0,0.0]],"o":[[1.06046,0.0],[0.74986,0.74986],[0.0,1.06046],[-0.74986,0.74986],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,12.0],[20.0,12.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"tag","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[14],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-8.4],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.586,2.586],[11.172,2.0],[4.0,2.0],[2.58579,2.58579],[2.0,4.0],[2.0,11.172],[2.586,12.586],[11.29,21.29],[13.0,21.99514],[14.71,21.29],[21.29,14.71],[21.99514,13.0],[21.29,11.29]],"i":[[0.0,0.0],[0.53019,0.00011],[0.0,0.0],[0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0],[-0.37495,-0.37484],[0.0,0.0],[-0.64051,0.0],[-0.45434,0.45147],[0.0,0.0],[0.0,0.64051],[0.45147,0.45434]],"o":[[-0.37484,-0.37495],[0.0,0.0],[-0.53023,0.0],[-0.37493,0.37493],[0.0,0.0],[0.00011,0.53019],[0.0,0.0],[0.45434,0.45147],[0.64051,0.0],[0.0,0.0],[0.45147,-0.45434],[0.0,-0.64051],[0.0,0.0]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,7.5],[7.85355,7.85355],[7.5,8.0],[7.14645,7.85355],[7.0,7.5],[7.14645,7.14645],[7.5,7.0],[7.85355,7.14645]],"i":[[0.0,-0.13256],[0.09373,-0.09373],[0.13256,0.0],[0.09373,0.09373],[0.0,0.13256],[-0.09373,0.09373],[-0.13256,0.0],[-0.09373,-0.09373]],"o":[[0.0,0.13256],[-0.09373,0.09373],[-0.13256,0.0],[-0.09373,-0.09373],[0.0,-0.13256],[0.09373,-0.09373],[0.13256,0.0],[0.09373,0.09373]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"trash-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[3.0,6.0],[21.0,6.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[5,6]},"p":{"a":1,"k":[{"t":0,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[5,3.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[-10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[19.0,6.0],[19.0,20.0],[18.41421,21.41421],[17.0,22.0],[7.0,22.0],[5.58579,21.41421],[5.0,20.0],[5.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[8.0,6.0],[8.0,4.0],[8.58579,2.58579],[10.0,2.0],[14.0,2.0],[15.41421,2.58579],[16.0,4.0],[16.0,6.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.37493,0.37493],[-0.53023,0.0],[0.0,0.0],[-0.37493,-0.37493],[0.0,-0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.53023],[0.37493,-0.37493],[0.0,0.0],[0.53023,0.0],[0.37493,0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[5,6]},"p":{"a":1,"k":[{"t":0,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[5,3.6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[5,6],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[-10],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[6.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[10.0,11.0],[10.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[14.0,11.0],[14.0,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"triangle-alert","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[9],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-5.3999999999999995],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.73,18.0],[13.73,4.0],[12.67905,3.10855],[11.30095,3.10855],[10.25,4.0],[2.25,18.0],[2.01343,19.35322],[2.70562,20.53983],[4.0,21.0],[20.0,21.0],[21.28457,20.53121],[21.96768,19.34662]],"i":[[0.23493,0.40691],[0.0,0.0],[0.44475,0.16322],[0.44475,-0.16322],[0.23359,-0.41217],[0.0,0.0],[-0.08337,-0.46475],[-0.36351,-0.30133],[-0.47214,0.00425],[0.0,0.0],[-0.35973,0.30227],[-0.08143,0.46275]],"o":[[0.0,0.0],[-0.23359,-0.41217],[-0.44475,-0.16322],[-0.44475,0.16322],[0.0,0.0],[-0.2361,0.40889],[0.08337,0.46475],[0.36351,0.30133],[0.0,0.0],[0.46986,-0.00048],[0.35973,-0.30227],[0.08143,-0.46275]],"c":true}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,9.0],[12.0,13.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,17.0],[12.01,17.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"type","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,4.0],[12.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,7.0],[4.0,5.0],[4.29289,4.29289],[5.0,4.0],[19.0,4.0],[19.70711,4.29289],[20.0,5.0],[20.0,7.0]],"i":[[0.0,0.0],[0.0,0.0],[-0.18746,0.18746],[-0.26511,0.0],[0.0,0.0],[-0.18746,-0.18746],[0.0,-0.26511],[0.0,0.0]],"o":[[0.0,0.0],[0.0,-0.26511],[0.18746,-0.18746],[0.0,0.0],[0.26511,0.0],[0.18746,0.18746],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,20.0],[15.0,20.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"undo-2","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[-2,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[9.0,14.0],[4.0,9.0],[9.0,4.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[4.0,9.0],[14.5,9.0],[18.38909,10.61091],[20.0,14.5],[18.38909,18.38909],[14.5,20.0],[11.0,20.0]],"i":[[0.0,0.0],[0.0,0.0],[-1.03105,-1.03105],[0.0,-1.45813],[1.03105,-1.03105],[1.45813,0.0],[0.0,0.0]],"o":[[0.0,0.0],[1.45813,0.0],[1.03105,1.03105],[0.0,1.45813],[-1.03105,1.03105],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"upload","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[12.0,3.0],[12.0,15.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[17.0,8.0],[12.0,3.0],[7.0,8.0]],"i":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":1,"k":[{"t":0,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[0,-2],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0,0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]},{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[21.0,15.0],[21.0,19.0],[20.41421,20.41421],[19.0,21.0],[5.0,21.0],[3.58579,20.41421],[3.0,19.0],[3.0,15.0]],"i":[[0.0,0.0],[0.0,0.0],[0.37493,-0.37493],[0.53023,0.0],[0.0,0.0],[0.37493,0.37493],[0.0,0.53023],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.53023],[-0.37493,0.37493],[0.0,0.0],[-0.53023,0.0],[-0.37493,-0.37493],[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"x","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":0,"k":[100,100]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":8,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":14,"s":[-7],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}},{"t":20,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[18.0,6.0],[6.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"sh","ks":{"a":0,"k":{"v":[[6.0,6.0],[18.0,18.0]],"i":[[0.0,0.0],[0.0,0.0]],"o":[[0.0,0.0],[0.0,0.0]],"c":false}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+1
View File
@@ -0,0 +1 @@
{"v":"5.7.4","fr":60,"ip":0,"op":20,"w":24,"h":24,"nm":"zap","ddd":0,"assets":[],"layers":[{"ty":4,"ind":1,"ks":{"a":{"a":0,"k":[12,12]},"p":{"a":0,"k":[12,12]},"s":{"a":1,"k":[{"t":0,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":8,"s":[112.0,112.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13.4,"s":[95.8,95.8,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":17.0,"s":[101.44,101.44,100],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[100.0,100.0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":6,"s":[8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":13,"s":[-4.8],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}},{"t":20,"s":[0],"i":{"x":0.65,"y":1},"o":{"x":0.3,"y":0}}]},"o":{"a":0,"k":100}},"shapes":[{"ty":"gr","nm":"part","it":[{"ty":"sh","ks":{"a":0,"k":{"v":[[15.914,4.0],[15.91644,3.00861],[15.29993,2.23224],[14.33377,2.01001],[13.44,2.439],[4.44,11.439],[4.02923,12.20693],[4.11435,13.07366],[4.66667,13.747],[5.5,14.0],[9.502,14.0],[9.79886,14.09813],[9.97939,14.35341],[9.973,14.666],[8.086,20.0],[8.08368,20.99172],[8.70067,21.76814],[9.66729,21.98987],[10.561,21.56],[19.561,12.56],[19.99968,11.49948],[19.56027,10.43927],[18.5,10.0],[14.503,10.0],[14.20523,9.90219],[14.02418,9.64635],[14.031,9.333]],"i":[[0.0,0.0],[0.11155,0.32112],[0.2875,0.1814],[0.33786,-0.03756],[0.24064,-0.24011],[0.0,0.0],[0.05796,-0.29093],[-0.11345,-0.2741],[-0.24662,-0.16487],[-0.29665,-6e-05],[0.0,0.0],[-0.0859,-0.06359],[-0.03134,-0.10218],[0.03548,-0.10082],[0.0,0.0],[-0.11166,-0.32121],[-0.28769,-0.18133],[-0.33796,0.03781],[-0.2405,0.24042],[0.0,0.0],[0.00014,0.39753],[0.28111,0.28108],[0.39753,8e-05],[0.0,0.0],[0.08619,0.06366],[0.03136,0.10246],[-0.03579,0.101]],"o":[[0.11313,-0.32057],[-0.11155,-0.32112],[-0.2875,-0.1814],[-0.33786,0.03756],[0.0,0.0],[-0.20983,0.2097],[-0.05796,0.29093],[0.11345,0.2741],[0.24662,0.16487],[0.0,0.0],[0.10688,0.00014],[0.0859,0.06359],[0.03134,0.10218],[0.0,0.0],[-0.11317,0.32068],[0.11166,0.32121],[0.28769,0.18133],[0.33796,-0.03781],[0.0,0.0],[0.28092,-0.28127],[-0.00014,-0.39753],[-0.28111,-0.28108],[0.0,0.0],[-0.10716,0.00015],[-0.08619,-0.06366],[-0.03136,-0.10246],[0.0,0.0]],"c":true}}},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1.75},"lc":2,"lj":2},{"a":{"a":0,"k":[0,0]},"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"ty":"tr"}]}],"ip":0,"op":20,"st":0}],"markers":[{"cm":"play","tm":0,"dr":20}]}
+4 -1
View File
@@ -17,7 +17,10 @@ fn main() {
.set("ProductName", "PaperCraft")
.set("FileDescription", "PaperCraft infinite canvas")
.set("CompanyName", "PaperCraft Authors")
.set("LegalCopyright", "Copyright (c) the PaperCraft authors. MIT OR Apache-2.0.")
.set(
"LegalCopyright",
"Copyright (c) the PaperCraft authors. MIT OR Apache-2.0.",
)
.set("OriginalFilename", "papercraft.exe")
.set("InternalName", "papercraft");
if let Err(e) = res.compile() {
+32
View File
@@ -0,0 +1,32 @@
# Browser build + relay in one image: `papercraft-relay --static` serves web/ and the agent relay.
# craft-libs is a private Gitea dependency, so vendor on the host (authenticated) and pass it in:
# cargo vendor --locked /path/vendor/crates >/dev/null
# docker build -f deploy/Dockerfile --build-context vendor=/path/vendor -t localhost:32000/papercraft-web:<tag> .
FROM rust:slim AS build
# Must match the wasm-bindgen crate in Cargo.lock.
ARG WASM_BINDGEN=0.2.129
RUN rustup target add wasm32-unknown-unknown \
&& apt-get update && apt-get install -y --no-install-recommends binaryen pkg-config libssl-dev libdbus-1-dev \
&& rm -rf /var/lib/apt/lists/* \
&& cargo install wasm-bindgen-cli --version ${WASM_BINDGEN} --locked
COPY --from=vendor crates /vendor
RUN printf '%s\n' \
'[source.crates-io]' 'replace-with = "vendored-sources"' \
'[source."git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=22544b6d619d4f16779b8bdfa3f0b642a86fc065"]' \
'git = "https://git.marcospaulo.dev.br/masi/craft-libs"' \
'rev = "22544b6d619d4f16779b8bdfa3f0b642a86fc065"' 'replace-with = "vendored-sources"' \
'[source.vendored-sources]' 'directory = "/vendor"' > "$CARGO_HOME/config.toml"
WORKDIR /src
COPY . .
RUN sh web/build.sh && cargo build --release --locked --bin papercraft-relay
FROM debian:stable-slim
RUN apt-get update && apt-get install -y --no-install-recommends libssl3 libdbus-1-3 ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --system --uid 10001 papercraft
COPY --from=build /src/target/release/papercraft-relay /usr/local/bin/papercraft-relay
COPY --from=build /src/web/index.html /srv/web/index.html
COPY --from=build /src/web/pkg /srv/web/pkg
USER 10001
EXPOSE 8787
ENTRYPOINT ["papercraft-relay", "--static", "/srv/web", "--data", "/data"]
+86
View File
@@ -0,0 +1,86 @@
# Shared projects live in /data (`--data`) on the HDD: PV /srv/hdd/papercraft, class hdd-storage, Retain (same pattern as actual, kavita, ...).
# --library: every project in /data is listed at /library and synced to every device that opens the site, with no link
# needed. There are no accounts, so the Tailnet-only ingress is the whole access boundary; never expose this publicly.
# Tailnet access (DNS, TLS, ingress) is added with `expose papercraft/papercraft papercraft`; see deploy/README.md.
apiVersion: v1
kind: Namespace
metadata:
name: papercraft
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hdd-papercraft
spec:
capacity: {storage: 5Gi}
accessModes: [ReadWriteOnce]
persistentVolumeReclaimPolicy: Retain
storageClassName: hdd-storage
volumeMode: Filesystem
local: {path: /srv/hdd/papercraft}
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [kubernets]}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: papercraft-data
namespace: papercraft
spec:
accessModes: [ReadWriteOnce]
storageClassName: hdd-storage
volumeName: pv-hdd-papercraft
resources:
requests: {storage: 5Gi}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: papercraft
namespace: papercraft
spec:
replicas: 1
selector:
matchLabels: {app: papercraft}
template:
metadata:
labels: {app: papercraft}
spec:
securityContext: {fsGroup: 10001}
volumes:
- name: data
persistentVolumeClaim: {claimName: papercraft-data}
containers:
- name: web
image: localhost:32000/papercraft-web:0.2.0-ea6f1b3
args: ["--library", "--allow-origin", "https://papercraft.marcospaulo.dev.br"]
volumeMounts:
- {name: data, mountPath: /data}
ports:
- containerPort: 8787
readinessProbe:
httpGet: {path: /index.html, port: 8787}
livenessProbe:
httpGet: {path: /index.html, port: 8787}
initialDelaySeconds: 10
resources:
requests: {cpu: 20m, memory: 32Mi}
limits: {cpu: 500m, memory: 256Mi}
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities: {drop: [ALL]}
---
apiVersion: v1
kind: Service
metadata:
name: papercraft
namespace: papercraft
spec:
selector: {app: papercraft}
ports:
- port: 80
targetPort: 8787
+67 -3
View File
@@ -1,12 +1,14 @@
# Driving PaperCraft with agents
PaperCraft exposes one set of tools (40 at the time of writing) three ways. They all run the same code inside the app, so an agent sees what you see and every call is one undo step.
PaperCraft exposes one set of 70 tools three ways. They all run the same code inside the app, so an agent sees what you see and every call is one undo step.
| Way | Use it when | Needs the app running |
|---|---|---|
| MCP over HTTP, `http://127.0.0.1:29980/mcp` | the agent client speaks MCP (Claude Code, Codex, pi) | yes |
| MCP over stdio, `papercraft-mcp` | the client only starts stdio servers | for calls; `tools/list` works offline |
| Shell, `papercraft-cli` | the agent has a terminal and you want no tool schemas in its context | for `call`; `list`, `schema` and `icons` work offline |
| Shell, `papercraft-cli` | the agent has a terminal and you want no tool schemas in its context | for `call`; `list`, `schema` and `icons` work offline (with the app running, `list` and `schema` show the app's tools) |
If you would rather talk to the agent inside the app, Chat mode (⌘J, or `Design | Chat` in the top bar) is the in-app alternative. It runs Claude Code or Codex through their CLIs against the same MCP server, ACP agents such as OpenCode or Gemini CLI, or the Anthropic API with your own key, and keeps the conversation next to the canvas, with the same runs, review and revert. The setup and the thread are in [chat.md](chat.md). The rest of this guide covers driving the app from your own terminal or agent client.
## Install
@@ -75,12 +77,74 @@ papercraft-cli call finish_working_on_nodes '{"nodeIds":["abc123:1"]}'
Pass JSON inline, or `-` to read it from stdin (best for HTML, which is full of quotes; `jq -Rs` can wrap a file into the right JSON). Text results go to stdout. Images are saved to `--out` (default `<tool>.png`) and the path is printed.
## Without the app
`papercraft-cli` also works with PaperCraft closed (a server, CI, a headless box). When nothing answers on the port, or with `--offline`, tools run inside the CLI on the project store (`$PAPERCRAFT_HOME`, else the default folder) and every editing call is saved. Projects made this way open normally in the app.
```sh
papercraft-cli call create_file '{"name":"Demo"}' # -> fileId
papercraft-cli call create_artboard '{"name":"Card"}' --project Demo
papercraft-cli call get_screenshot '{"nodeId":"abc123:1"}' --project Demo -o card.png
```
`--project <name|id|path>` opens that project first; without it the most recently modified one is used. With the app open on a project, plain `call` goes to the app, and `--offline` on that same project is refused ("PaperCraft has this project open") so two writers never share a folder. Screenshots need a GPU adapter; with none, the software adapter is tried, and if that fails the image tools return an error while all other tools work.
### Shell and scripts
When `call` or `shell` reaches the app and the app is another version, the CLI prints once on stderr, for example `papercraft-cli 0.6.1 ≠ app 0.6.2; reinstall the CLI`. `list` and `schema` read the running app's tool list, so tools newer than the CLI still show; with the app closed they use the CLI's built-in list.
`papercraft-cli shell [--project X] [--offline]` keeps one session open (offline, one in-process project; otherwise the app). A line is `<tool> <json>` (JSON may span lines until its braces close) or a command: `:help :tools :schema <tool> :open <project> :pages :page <name|id> :shot [nodeId] [file] :undo :redo :save :watch on|off :quit`. `:watch on` renders the artboard last edited to `preview.png` after each editing call, shown inline on iTerm2, WezTerm and kitty. Input is plain stdin (no line editing or history; use `rlwrap` for that). Piped input prints no prompt and exits 1 if any line failed, listing the line numbers on stderr.
```sh
papercraft-cli shell --offline --project Demo <<'EOF'
# build a card
create_artboard {"name":"Card","styles":{"width":"320px","height":"180px","backgroundColor":"#1e1e2e"}}
write_html {
"targetNodeId": "abc123:1",
"mode": "insert-children",
"html": "<div style='font-size:28px;color:#cdd6f4'>Hello</div>"
}
:shot abc123:1 card.png
EOF
```
## Design-system tools
* Variables: `get_variables` and `set_variables` take collections, groups (`color/brand/primary`), types (`color`, `number`, `string`, `boolean`), `mode`, `alias`, `description` and `hidden`; the old `{"name":"#hex"}` call still works and lands in the first collection. `create_collection` makes a collection with modes, `delete_variables` removes by name (refuses aliased ones unless `force`), `bind_variable` binds or detaches a field of layers (`stroke`, `text-color`, `width`, `height`, `gap`, `padding`, `radius`, `font-size`, `line-height`, `opacity`, `visible`).
* Components: `get_components` lists mains of every page and enabled library with a `componentKey`; `create_instance` and `swap_instance` accept a main from any page or library (`componentId` or `componentKey`).
* Libraries: `publish_library`, `list_libraries`, `enable_library`, `update_library`, `disable_library`. They work offline too, on the project store.
## Seeing what the user sees
* `get_basic_info` and `get_selection` include `viewport: {pageId, rect: [x, y, w, h], zoom}`: the page the user is viewing and the world rect on screen.
* `set_viewport {pageId?, nodeIds? | rect?, zoom?, padding?, force?}` switches the user's page (as the page list does) and fits the nodes or rect, or centres them at an explicit `zoom` (0.01 to 256; `select_nodes {zoom: true}` stops at 100%). While the user is panning or zooming (10 s after their last camera move) it is refused with "user is moving the canvas", unless `force: true`.
* `find_nodes {textValue}` finds text layers containing the phrase on every page (or `pageId`), ignoring case and line breaks; `*` wildcards match the whole value instead. `get_tree_summary {nodeId, fullText: true}` prints every text layer's complete text, for copy review across screens.
* `get_screenshot {nodeId, annotations: true}` draws the notes on the captured layers (cards, number badges, leader lines), so an agent can check note placement.
## Annotation tools
* `annotate {pageId?, notes: [{node, text, type?}]}` adds many notes in one undo step. `node` is a node id or an exact layer name; the first line of `text` is the label and the rest the body; `type` is a category key (default `rule`) that the page's template must enable. Placement is automatic. `annotate {tidy: true, frame?}` with no notes re-lays-out the existing notes and returns `{"tidied": n}`, the number of notes it moved.
* `get_annotation_template {pageId?}` returns the allowed types with their guidance and fields. Call it once before `annotate`.
* `set_annotation_template {template, scope?: "page" | "project", pageId?}` switches the template by id or name.
* `upsert_annotation_template {template: {id?, name, display?, categories: [{key, enabled?, guidance?, fields?}]}, categories?: [{key, name, color, icon}], setAs?: "project" | "page", pageId?}` creates or replaces a template and its category styles in one undo step. `delete_annotation_template {template}` removes one (the last stays).
* `get_annotations {nodeId?, pageId?, full?}` reads notes as `[number, node, type, text]` rows.
* `update_annotation {id | ref, text?, type?}` and `delete_annotations {ids}` take ids or references such as `Sign in #3`.
See [annotations.md](annotations.md) for categories, templates and what the notes look like.
## Safety
The server listens on loopback only, rejects requests that carry an `Origin` header (browsers) and foreign `Host` headers. Anything on your machine that can reach `127.0.0.1:29980` can edit the open project, so do not forward the port. Undo (⌘Z, or the `undo` tool) reverts any agent edit.
## Runs and review
Editing calls are grouped into an agent run. A run ends after 30 seconds without an editing call, when the project changes, or when `finish_working_on_nodes` is called. Before each page's first edit in a run, PaperCraft saves an auto-version named `Before agent run N`. Call `finish_working_on_nodes` at the end of your work so the run gets a useful title and ends right away.
The Agent view lists runs and lets you review changes, revert a whole run, undo one change, or accept all changes. Review also marks changes on the canvas; a toast offers Review and Revert when a run finishes. The command palette has `Review last agent run` and `Revert last agent run`. Run records live under `runs/` in the project folder; PaperCraft keeps the newest 50 runs.
## Reference
* [Tool reference](../skills/papercraft/references/tools.md), generated from `papercraft-cli schema`.
* [Design systems](design-system.md): variables, components, icons, lint.
* [Design systems](design-system.md): collections, variables and bindings, components, libraries, icons, lint.
* [Design-system packages](design-system-packages.md): importing and exporting an OpenDesign package.
* `papercraft-cli --help`-style usage: run `papercraft-cli` with no arguments.
+148
View File
@@ -0,0 +1,148 @@
# Annotations
An annotation is a note that explains a design in place: a business rule, a behaviour, where the data comes from, an accessibility gap. Each note is a small card with a number, a category, a label and an optional body, joined to its layer by a leader line. Teams use them for review and handoff, and turn them off for presenting.
Annotations live on a page and are saved with it (the `annotations` list in the page file). Pages without any load and save exactly as before. Categories and templates are project-wide and live in `design.json`.
## Categories
Every note has one category. The category is the only thing that sets how a note looks: its icon, colour and badge come from the category, and a note stores none of them. Change a category's colour or icon and every note in it changes.
Each category has a short type key. Agents and the Annotate popover use the key; the UI shows the name.
| Key | Name | Icon | Colour | Use for |
|---|---|---|---|---|
| `rule` | Business rule | scale | violet `#7c5cff` | the rule or constraint the part enforces |
| `behaviour` | Behaviour | zap | blue `#2f80ed` | states, transitions, edge cases |
| `content` | Content | type | green `#1fa87a` | copy, tone, length |
| `data` | Data | database | amber `#e08a1e` | where a value comes from |
| `a11y` | Accessibility | accessibility | pink `#d94f8a` | focus, labels, contrast, reading order |
| `dev` | Dev note | code | grey `#6b7280` | implementation notes for engineers |
You can add categories, rename them, change their key, colour and icon, and write guidance for each one in the Customize modal. A custom category gets a key too.
## Templates
A template says which kinds of notes a page wants, and what each note should contain. The project has a default template; a page can use its own instead.
Built-in templates are editable copies, not locked. Each category in a template has enabled or not, guidance (a short prompt for what the note should say) and optional fields (structured lines such as `Owner`).
| Template | Categories | Fields |
|---|---|---|
| Product spec | rule, behaviour, content, data | none |
| Dev handoff | behaviour, data, dev, a11y | none |
| Accessibility review | a11y | Issue, WCAG, Fix |
| Content review | content | Tone, Max length |
| Minimal | rule | none |
Pick the project default or "This page" from the template chips at the top of the Annotations side view. Built-ins can be reset; custom templates can be deleted. Duplicate copies any template so you can change it.
**Customize…** (side view) opens the template editor: name, display (full notes or badges), the enabled categories, the guidance and fields of each. Changes to categories apply to the whole project.
The Annotate popover offers only the enabled categories of the active template, and shows each field as a labelled line. A field is stored as a `Name: value` line at the top of the note's body. Agents get the same rule: `annotate` refuses a type the template disables and lists the allowed keys.
## View modes
Three levels, all view state. They are not saved in the design and not undoable.
* **Full**: every note shows its label and the first lines of its body. Below 60% zoom notes show as badges, so cards never spill over the design; zoom in to read them.
* **Badges**: only the number badges are shown.
* **Hidden**: nothing is drawn.
`⌘⇧A` (View → Annotations) cycles Full → Badges → Hidden → Full. The starting mode follows the template's display setting until you change it.
Two finer controls:
* **Per note**: collapse a note to its number badge; click the badge to expand it again.
* **Per category**: show or hide a category from the category filter in the side view.
Annotations are drawn as an overlay on the canvas only. Exports (PNG, SVG, PDF) and Present mode never include them. There is no option to include them in an export yet.
## Annotate tool
Press `N` for the Annotate tool, then click a layer. The New annotation popover opens beside it with:
* Category, from the template's enabled categories.
* Label, up to 40 characters. The popover shows the count.
* The template's fields, if any.
* A note, in Markdown.
Save creates the note with its leader line to the layer's side; Cancel discards it. You can also select layers, right-click, and choose **Annotate**.
Each note's leader line starts at the note card and ends at the anchor on the target. The card and the anchor are stored relative to the target, so moving or resizing the layer keeps the note attached. Drag a card to move it; the line re-routes.
If the target is deleted, the note stays where it was in the side view's **Detached** group, with a warning badge.
## Annotations side view
The side view lists the page's notes:
* Grouped by top-level frame, plus **Page** (notes on no frame) and **Detached**.
* Each row shows the number, the category chip and the label. Click a row to select the layer and zoom to it.
* The category filter shows or hides categories.
* Edit a note inline, or delete it. Edits are one undo step each.
* **Add annotation** opens the popover for the current selection.
* **Annotate with AI** puts a prompt in the Chat composer, unsent, with the selected frame (or the page) as a chip. The prompt asks the agent to read the template with `get_annotation_template` and add all the notes in one `annotate` call. It needs a saved project and Chat mode.
Numbers run per frame in reading order (top to bottom, then left to right), so a frame reads 1, 2, 3. Notes on no frame are numbered after that, from 1.
## Inspector
When a single layer is selected, the inspector has an Annotations section. It lists that layer's notes, with edit and delete, and an Add annotation button. The note's anchor is one of the four sides of the target (Top, Right, Bottom, Left) with a position along it.
## Agents
Agents work with notes through six MCP tools, all in `src/mcp/tools.rs`. They are one undo step per call and appear in `edits_doc`, so a run that only adds notes still gets a Review card (a "Notes" group, counted as added, changed or removed), and Revert removes them.
| Tool | What it does |
|---|---|
| `get_annotation_template` | Reads the template: `[type key, guidance, field names]` for each enabled type. Call it once before `annotate`. |
| `set_annotation_template` | Switches the template by id or name, for one page (default) or the project (`scope: "project"`). |
| `upsert_annotation_template` | Creates or replaces a template, and creates or restyles categories in the same call (`categories: [{key, name, color, icon}]`). `setAs: "project"` or `"page"` makes it the default or the page override. Returns `{id, name, types}`. |
| `delete_annotation_template` | Deletes a template by id or name. The last template stays. |
| `annotate` | Adds many notes at once. Each note names a node id or an exact layer name on the page, a `text` and a `type` (default `rule`). |
| `get_annotations` | Reads notes as `[number, nodeName, type, text]` rows (text capped at 120 characters). `full: true` returns complete objects; `nodeId` limits to a subtree; `pageId` picks another page. |
| `update_annotation` | Changes the text or type of one note, by `id` or by reference such as `Sign in #3`. |
| `delete_annotations` | Deletes notes by ids or references such as `Sign in #3`. |
Custom template with a new category, used on the current page:
```json
{
"template": {"name": "Legal review", "categories": [
{"key": "legal", "guidance": "Legal risk this part carries.", "fields": ["Owner", "Law"]},
{"key": "rule"}]},
"categories": [{"key": "legal", "name": "Legal", "color": "#aa3355", "icon": "scale"}],
"setAs": "page"
}
```
`icon` must be one of the built-in icon names (an unknown name lists them). Every key in the template must exist, either already or in `categories`. The template and category edit is one undo step; `setAs: "page"` adds a second.
For `annotate` and `update_annotation`, the first line of `text` is the label and the rest is the body. There are no positions, icons or colours: PaperCraft places each note beside its target, outside the frame, stacked so none overlap. `annotate` is all or nothing: if one note is refused (an unknown layer, or a type the template disables), none is added and the error lists the allowed keys.
Batched call, on a page whose template is Product spec:
```json
{
"notes": [
{"node": "Sign in", "type": "rule", "text": "Lock after 5 failed tries\nLocks for 15 minutes, then resets."},
{"node": "Email field", "type": "data", "text": "Source: users.email\nValidated on blur"},
{"node": "Submit", "type": "behaviour", "text": "Disabled until both fields are valid\nSpinner while the request runs"}
]
}
```
The reply is one row per note, `[number, node, type, label]`. Then `get_annotations {}` reads them back, and `delete_annotations {"ids":["Sign in #3"]}` removes one by its frame reference.
`annotate {"tidy": true}` with no notes re-runs placement for every note on the page (or on `frame`) in one undo step and returns `{"tidied": n}`, the number of notes it moved; `0` means the layout was already tidy.
To see the notes, `get_screenshot {"nodeId": "<frame>", "annotations": true}` draws the cards, number badges and leader lines of the notes whose target is inside the captured layers, placed and routed as on the canvas (full cards, scale 1). The image grows to include the cards. Without `annotations`, or with `false`, the screenshot is the same as before.
**Handoff.** `get_design_spec` and the code exports (`get_jsx`) include the notes of the frame as comments. Each note is one line, `// 1 Business rule: Lock after 5 failed tries`, with its body lines as more `//` lines, so code generated from a frame carries the rules next to the markup.
## Storage
* The page file has an `annotations` list. Each note holds its target (or a point, when it has none), its anchor, label, body, category, position, author (`user` or `agent`) and creation time. A note whose target is gone is marked `detached`.
* `design.json` holds the categories and the templates, with the project default. A page may name its own template.
* Old projects load unchanged. A page without annotations saves byte-identical to before.
+176
View File
@@ -0,0 +1,176 @@
# Chat mode
Chat mode puts a conversation with an agent next to the canvas. Press ⌘J, or use the `Design | Chat` switch in the top bar, to turn it on. The chat column sits on the left (420 to 640 px, 480 by default, resizable) and the live canvas fills the rest. The layers and inspector are hidden; the inspector can be opened as a narrow overlay on the canvas's right edge. Design mode works as before, and a chat keeps running in the background when you switch back.
The mode is remembered per project. Entering a project that was last left in Chat mode opens in Chat mode and shows its newest chat.
Chat mode is native only. The web build shows the switch disabled with a note.
## Backends
Chat drives the same tools as an agent connected over MCP, so the edits, runs, undo and revert behave the same whichever backend you use. There are three ways in: two CLIs that PaperCraft talks to directly, any agent that speaks ACP, and API endpoints.
**Claude Code** runs `claude -p` with streaming JSON in and out. PaperCraft writes an MCP config that points the CLI at the app's own server on `127.0.0.1`, allows the `mcp__papercraft__*` tools, and passes `--strict-mcp-config`, so the CLI sees only PaperCraft's server. The PaperCraft skill text goes in through `--append-system-prompt-file`. The working directory is the project folder. Follow-up messages resume the CLI session by its id, so the agent keeps its context.
**Codex** runs `codex exec --json` in the project folder. The PaperCraft server is added with a `-c mcp_servers.papercraft.url=...` override, and its tools are pre-approved (`default_tools_approval_mode="approve"`), so Codex does not stop to ask for each one. The PaperCraft instructions are prepended to the first prompt of a chat; resumed sessions do not repeat them. Follow-ups resume the Codex session the same way.
**ACP agents** run any agent that speaks the Agent Client Protocol (https://agentclientprotocol.com) over stdio. PaperCraft starts the agent once per turn, sends `initialize` and `session/new` with the project folder as the working directory, and passes PaperCraft's MCP server: over HTTP when the agent supports it, otherwise through the bundled `papercraft-mcp` stdio bridge. The prompt goes out as `session/prompt`, and the agent's streamed updates become the same thread as the other backends: text, thinking, tool cards and the plan. Stop sends `session/cancel`. Follow-ups resume with `session/load` when the agent supports it. ACP has no system prompt field, so the PaperCraft instructions go in front of the first prompt.
The ACP agents PaperCraft knows about, and what was checked on the development Mac:
* **OpenCode** (`opencode acp`): works.
* **Gemini CLI** (`gemini --acp`): found and started, but its server currently refuses ACP clients, so turns fail with the agent's error until Google changes that.
* **Cursor** (`cursor-agent acp`): sign in first with `cursor-agent login`.
* **Pi** (`pi-acp`, an adapter run through `npx`): enable it once in the agent panel or Settings, then it works like the others.
* **Goose, Kimi, Devin, Junie, Mistral Vibe, Hermes, OpenHands, Stakpak, VT Code, Poolside, Droid**: started with the command their own docs give. They are not all verified here.
* **Claude Code and Codex ACP adapters** (`npx`): listed under Enable via npx. Claude Code and Codex themselves use the direct backends above.
Agents that run through `npx` are off until you enable them, because enabling runs code that npx fetches from npm.
ACP permissions: PaperCraft's own tools run without asking, except the destructive ones listed under Approval below. Any other tool the agent asks to run (its own shell or file tools, for example) shows an approval card with Approve or Deny in the thread, and Deny is sent back to the agent.
**Custom agents** are your own ACP agents: a name, a command (a program name on the resolved `PATH`, or a full path) and arguments. The arguments are split on spaces, with no quoting. Custom agents appear under Custom in the agent panel and in Settings → Chat.
**API endpoints** call a model over HTTPS with your own key. Settings → Chat holds a list of endpoints, each with a name, a format, a base URL, a model and an optional key. The app's tool list is sent as the API tools, and every tool call runs through the same code path as an MCP call on the UI thread. The loop continues until the model ends its turn, for up to 40 tool rounds per message.
* **Format**: `Anthropic` is the Messages API (`POST {base}/v1/messages`, `x-api-key`). `OpenAI` is Chat Completions (`POST {base}/chat/completions`, `Authorization: Bearer`, streaming `choices[].delta`, tools as `{"type":"function",...}`, tool results as `tool` messages). Both give the same thread: text, tool cards, approvals, Stop, the usage line.
* **Base URL and model** are free text, for example `https://api.anthropic.com`, any Anthropic-compatible URL, or `http://127.0.0.1:11434/v1`. The key is optional, so local servers need none.
* A default endpoint named `Anthropic` (`https://api.anthropic.com`, `claude-opus-5-5`) exists from the start, so the first run needs only a key.
* The agent panel lists Detected agents, API endpoints and Custom agents (see Setup). Each chat remembers its backend.
* **Claude-only fields** (effort, the thinking summary, the refusal fallback and its beta header, eager tool-input streaming, prompt-cache breakpoints) are sent only when the base URL host is `api.anthropic.com`. For that host the model menu offers `claude-opus-5-5`, `claude-sonnet-5-5` and `claude-haiku-5-5`, effort is `medium` by default (`low` and `high` in the menu), and the Thinking row shows the summary. Every other endpoint gets a plain request. Missing `usage`, thinking or cache fields in the reply are fine.
* **OpenAI format and images**: attached images are sent as `image_url` data URIs. A tool message in this format carries text only, so a tool result with an image (such as `get_screenshot`) goes back as the text `[image omitted]`, and the image follows as an extra user message in the same round.
* **Usage line**: input, output and cached tokens, as the server reports them; nothing when it reports none. A cost estimate shows only for the Claude models in the small price table in `src/chat/endpoint.rs`. It is not a bill.
* `ANTHROPIC_API_KEY` in the environment is used for `api.anthropic.com` when no key is stored. `PAPERCRAFT_ANTHROPIC_BASE_URL` points Anthropic-format requests at another URL (for tests and proxies).
## Setup
### Finding agents
Chat finds agents the way your terminal does. At startup PaperCraft reads your login shell's `PATH` once, off the UI thread (`$SHELL -l`, 3 s limit), and merges it with the app's own `PATH` and the usual folders (`~/.local/bin`, `/opt/homebrew/bin`, `/usr/local/bin`, `~/.cargo/bin`, `~/.bun/bin`, `~/.npm-global/bin`, Volta and nvm). Detection and the agent processes both use that merged `PATH`. This is why an agent installed under `~/.local/bin` or Homebrew is found even when PaperCraft was opened from the Dock.
A row shows a version when the agent reports one. A program with the right name that is not the agent (for example the `goose` database migration tool, which shares its name with Block's Goose agent) shows `Wrong program` with its path, not a false Ready.
PaperCraft never shows install commands. An agent that is not found shows `Not found`, with `Set path…` (opens Settings) and `Docs` (the agent's own documentation). Install the agent with its own installer, then press Detect again.
### Agent panel
Click the agent chip in the chat header. The panel opens over the chat column with a shadow and a dimmed backdrop, sized like the column. It has a search field (name or id), and these sections:
* **Detected**: agents found on your `PATH`, with the version and path. Click one to use it for this chat.
* **Enable via npx**: agents that start through `npx` (Pi, Qwen Code, Kilo, Cline, Auggie, Copilot CLI, Qoder, CodeBuddy and the Claude Code and Codex ACP adapters). Each row has an `Enable` chip. The section says that it runs code fetched by npx.
* **Not found**: registry agents that are not on this computer, folded by default.
* **API endpoints**: your endpoints, with an `Add` action that opens Settings.
* **Custom**: `Add custom agent` opens Settings.
Each row has a status chip: `Ready`, `Enable`, `Not found`, `Wrong program`, `No key` (an endpoint without a key) or `Set up` (an endpoint without a URL or model). Arrow keys move through the rows, Enter picks one, Escape closes the panel.
Settings → Chat has the same list, so an agent can also be hidden from the panel there (the `Show in the chat agent picker` switch on its row).
### Setup card
A chat with no backend chosen shows one card, "Connect an agent". It lists the agents detected on this computer, up to four, with `Show all agents` for the rest. Below them are `Add an API endpoint` and `Add custom agent`. The card never lists install steps.
### Sign-in
When an agent says it needs you to sign in (ACP's "Authentication required" and similar messages), the failed turn shows "<Agent> needs you to sign in" with the command from the agent's docs, then Retry. For Cursor that is `cursor-agent login`, for OpenCode `opencode auth login`, for Codex `codex login`, for Claude Code's ACP adapter `claude /login`. For agents without a known command the card says to sign in with the agent's own app and retry. Chat does not sign in for you.
### Settings → Chat
The page scrolls and keeps one grid for its labels. Its sections:
* **Agents**: one row per agent, with its status, version and path. A details disclosure holds the **Path override** (for a binary that is not on `PATH`, or a specific install; empty means the first match on the merged `PATH`), the **Arguments override** (replaces the registry's ACP arguments, for example `--acp --debug`), and for npx agents the **Enable** button. The **Show in the chat agent picker** switch hides an agent from the panel. Custom agents have Name, Command and Arguments fields and a Remove button. `Detect again` re-runs detection.
* **API endpoints**: add, edit and remove endpoints (name, format, base URL, model) and set the default one. Each has a key field with Save and Remove. Keys are stored in the macOS Keychain, Windows Credential Manager or the Linux Secret Service, under the service name `PaperCraft` and the user `api-key:<base URL>`. An older single key (`anthropic-api-key`) is still read for `api.anthropic.com` and moves to the new entry the next time you save it. Removing a key makes that endpoint stop until a key is saved again (for `api.anthropic.com`; other endpoints work without one).
* **Defaults for new chats**: the backend, the endpoint, and the effort for `api.anthropic.com`.
Settings from before endpoints existed (`api_model`) move into the default endpoint on first load. The `claude_path` and `codex_path` settings from earlier versions still win for their agent until you save the Agents list. These defaults, the agent settings and the endpoint list (never the keys) are saved in `chat_settings.json` in your config folder (`~/Library/Application Support/papercraft/` on macOS). They are not part of any project.
## The thread
The header has the chat title (rename), the chat list (new chat, switch, delete), the agent chip (for example `Claude Code · Opus 5.5`) and the context meter. The meter shows the tokens in the context at the last model call against a 200k window, and turns amber past 75%. It is hidden for Codex, which reports no per-call usage.
Replies are markdown: paragraphs, lists, code blocks with a copy button, inline code and links. While a turn runs, the reply streams in.
* **Thinking**: when the backend reports reasoning, a row shows "Thinking…" while it runs and collapses to a summary when it ends. Expand it to read the text.
* **Tool cards**: one card per tool call with the verb and target (for example "Drawing layout · Card"), a spinner while it runs, and a failed state with the error. Args and result are collapsible. `get_screenshot` results show a thumbnail.
* **Step groups**: consecutive tool calls in one reply fold into one line ("Built the card · 5 steps") that expands to the cards.
* **Plan**: when the agent keeps a todo list (Claude Code's `TodoWrite`, or an ACP plan), the latest list is pinned above the composer with a "done of total" count.
* **Approval**: on the API backend and for ACP agents, the destructive tools (`delete_pages`, `disable_library`, `import_design_system`, and `delete_nodes` on more than 20 layers) wait for Approve or Deny before they run. Deny returns an error to the model, which can then carry on. For ACP agents, any non-PaperCraft tool the agent asks for shows the same card. The Claude Code and Codex CLIs do not show this card. They use the CLI's own permission rules, and in non-interactive mode a tool that needs permission is denied. The papercraft tools are pre-allowed on both CLIs.
* **Checkpoint**: when an agent run starts, the thread shows "Checkpoint · before run N". "Restore to here" reverts that run and every run after it, through the same revert as the Agent view.
* **Run card**: when a run ends, "Agent finished, N changes" with Review, Revert and Accept. These are the same actions as the run review on the canvas. The card names the client that made the run ("Chat", "Claude Code · 2") and refreshes after an undo.
* **Progress**: while a run is open, the step group and the Working pill count calls and touched layers ("Styling · 212 calls · 1,340 changes"). The pill clears when the turn ends.
* **Errors**: a failed turn shows a red row with Retry. A sign-in problem shows the sign-in card (see Setup).
* **Canvas follow**: when a tool call targets a node, the canvas pans to it, unless you moved the camera in the last 10 seconds.
* **Agent presence**: after each agent call, the layers it pointed at or changed get an accent outline that fades over 3 seconds, and the newest carries a label with the verb and the client ("Styling · Claude Code"). This works for chat turns and for any MCP client. When the agent works on another page, a chip "Agent on page X →" switches to it.
## Design-system context
Every turn carries a summary of the project's design system, so the agent reuses what exists instead of drawing look-alikes:
* variables by collection and group with their modes (colors as `name=#light/#dark`), tokens as scales;
* main components on every page and in enabled libraries, as `componentKey · name · w×h · uses`, most used first;
* enabled libraries and their update status, and the page's annotation template;
* a reuse rule: place components with `create_instance` / `swap_instance`, colors as `var(--…)`, spacing on tokens.
The summary is capped at about 1,500 tokens. A large system keeps its most used components and collapses variable groups to counts, with a pointer to `get_components` / `get_variables` for the rest. It is rebuilt only when the design system changes. The API backends get it as a separate system block (cached on `api.anthropic.com`); CLI and ACP agents get it in their first prompt, and again as `[Design system changed] …` on the next message after a change. The context meter includes it. Turn it off in Settings → Chat → **Send design-system summary**.
`lint_design` has a matching rule, `not-an-instance`: a frame built by hand that matches a component (same structure, size within 4 px, same fill, radius and stroke) is flagged with the component to use.
## Pointing at the canvas
* **Pick**: the Pick chip next to `@ Selection` turns the canvas into a picker without changing your selection. Click a layer to add it, or Shift+drag an area; Esc cancels. Each pick types `@Name` at the composer cursor and adds a chip.
* **⌥-click**: in Chat mode, ⌥-click a layer on the canvas to add it the same way.
* **Area chips** are sent as `[Area] page P, rect x,y,w,h, contains: <ids…>` (the top layers wholly inside the area, up to 40).
* **Crops**: layer, area and `@ Selection` chips carry an image of that part of the page with its notes drawn (1024 px max). The API backend gets it as an image block; CLI and ACP agents get a file under `.papercraft-chat-tmp/`.
* **Ask (⌘K)**: with a selection, ⌘K opens a prompt box anchored above it. Enter sends to the chat with the selection chip and its crop, and the reply streams in the chat column without leaving Design mode. With nothing selected, ⌘K opens the command palette (also ⌘⇧/).
## Actions on a selection
The **Actions** menu opens from the canvas right-click menu, from the Actions chip in the composer and from the command palette ("Actions: …"). It works in Design and Chat modes.
Instant actions run in the app with no model. Each one is a single undo step and its own run (client "Actions"), and a toast reports what it did with Review and Revert:
* **Fix lint here**: `lint_design {fix: true}` on the selection.
* **Bind to tokens**: binds hard-coded colors to the nearest variable (within 12 RGB) and gaps, padding and radii to the nearest spacing or radius token (within 2 px). Values with no close match are listed.
* **Use components**: replaces each `not-an-instance` hit with an instance of its component in the same place, keeping the texts.
* **Rename layers**: names default layers (`Frame 12`, `Text`) from their text or role.
* **Annotate**: opens the annotation popover.
Agent actions send a prompt with a selection chip to the chat and switch to Chat mode: **Optimize** (tighten layout and spacing to the token scale, fix contrast, keep the content, prefer components), **Make consistent with the design system**, **Write states** (empty, loading, error), **Variations ×3** and **Annotate with AI**.
**Send open notes to chat**, in the inspector's Annotations section for a top-level frame, sends the frame's open feedback and its `todo` / `question` notes as one prompt with a chip.
## Composer and attachments
Type in the composer, ⏎ sends and ⇧⏎ adds a line. The empty state offers suggestions built from the project, such as "Design a sign-in screen using this project's variables" or "Lint this page and fix warnings".
* **Selection**: the `@ Selection` chip adds the current selection to the message as a chip (also ⌘L). Each click adds another chip, labelled with the layer name or `<first> · N layers`; an identical selection is added once, and each chip is removed on its own. Every chip is sent as a short line with the layer name and node ids.
* **Start failures**: if a turn cannot start (agent missing, bad path), an error row with Retry shows in the thread and your text stays in the composer.
* **Images**: the image button opens a file picker. You can also paste a clipboard image or drop image files on the column (PNG, JPEG, GIF, WebP).
For the API backend, images are sent as image blocks, so the model sees them. For the CLIs and ACP agents, each image is saved under `.papercraft-chat-tmp/` in the project and its path is added to the prompt for the agent to read.
While a turn runs, the send button becomes **Stop**. Stop asks the backend to interrupt: the CLIs get an interrupt, or SIGINT, then a kill after 3 seconds; ACP agents get `session/cancel`, then a kill if they do not exit. Every backend ends within 3 seconds. The thread shows a muted "Stopped" line, not an error. Tools that already ran stay applied, and the partial run can be reviewed or reverted like any other.
## Storage
A chat is one file in the project: `chats/<id>.json`, holding the title, the backend (kind, model, effort, CLI or ACP session id, agent) and the messages with their tool calls, usage and run ids. The API backend also keeps `chats/<id>.api.json`, the raw messages array (Messages format with thinking blocks, or Chat Completions format, whichever the endpoint speaks), so a follow-up replays exactly. The chat records its endpoint id. Deleting a chat asks first and removes both files, and its saved images.
Projects without a `chats/` folder load unchanged. The newest chat opens when you enter Chat mode.
## Privacy
PaperCraft never writes an API key into a project file, a chat or a log. The key lives in the OS credential store. The CLIs and ACP agents run with your own logins and do not get the API keys from the environment: `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `OPENAI_API_KEY` and `CODEX_API_KEY` are removed from their environment, so Claude Code and Codex bill your account, not a key you set for PaperCraft. The MCP server listens on loopback only, as it does for any other client.
Prompts, project content and tool results go to whichever backend you chose: the CLI's or agent's model service, or the base URL of the endpoint you picked. Nothing goes to any other service. An npx agent downloads its package from npm the first time it runs. If a server echoes your key in an error message, the app hides it before showing the message.
## Limits
* One turn per project at a time. Sending while a turn runs is refused with "A turn is already running"; use Stop first. Switching to another project stops a running turn.
* The web build has no Chat mode.
* While the agent works, the canvas shows fading outlines of the layers it touches; the full change review (added, changed, removed) comes after the turn, when the run is reviewed.
* Variations ×3 is a prompt for now: the agent makes the variants; there is no side-by-side Keep tag yet.
* Over the ACP stdio bridge the chat id does not reach the server, so those runs show under the agent's client name and close after 30 seconds idle instead of at turn end.
* The API backend stops after 40 tool rounds in one message and says so.
* Codex reports no per-call usage, so the context meter is hidden for it.
* Agents need to be installed and signed in with their own tools. Chat does not install them or sign them in for you.
* ACP terminal and file-system requests from an agent are answered as not supported. Agents use their own file tools.
+143
View File
@@ -0,0 +1,143 @@
# Design-system packages
PaperCraft can read and write **OpenDesign design-system packages**: a folder that holds a
`manifest.json`, a `tokens.css` and (usually) a `DESIGN.md`. They are the exchange format for
a design system — one design system in, the same design system out.
```text
my-system/
manifest.json what the package is
tokens.css the colors, modes and tokens
DESIGN.md the prose about the brand
```
The two tools are `import_design_system` and `export_design_system`.
```sh
papercraft-cli call import_design_system '{"path":"/path/to/my-system"}'
papercraft-cli call export_design_system '{"path":"/path/to/my-system"}'
```
## The format
### `manifest.json`
```json
{
"schemaVersion": "od-design-system-project/v1",
"id": "my-system",
"name": "My System",
"category": "product",
"description": "A small system",
"source": { "type": "github", "url": "https://example.com/system" },
"files": { "design": "DESIGN.md", "tokens": "tokens.css" },
"importMode": "hybrid"
}
```
| Key | Meaning |
|---|---|
| `schemaVersion` | `od-design-system-project/v1`. Another value is refused. |
| `id` | The slug of the folder: lowercase letters, digits and dashes. |
| `name`, `category`, `description` | What the system is. |
| `source` | Where it came from: `bundled`, `local`, `github` or `shadcn`. |
| `files` | The files of the package. `design` and `tokens` are required; `designTokens`, `tailwind` and `components` are optional. |
| `assetsDir`, `previewDir`, `usage`, `componentsManifest`, `importMode`, `craft`, `fonts`, `preview`, `sourceFiles` | Optional extras; they are kept as they are. |
`importMode` is `normalized`, `hybrid` or `verbatim`.
### `tokens.css`
Plain CSS custom properties. The `:root` block holds the base values, every
`[data-theme="name"]` block the values of one mode:
```css
:root {
--bg: #ffffff;
--accent: #cba6f7;
--spacing-md: 16px;
}
[data-theme="Dark"] {
--bg: #1e1e2e;
--accent: #89b4fa;
}
```
### `DESIGN.md`
Prose about the brand. PaperCraft reads it (the import reports that a package has one) and
writes a short summary of the variables, modes and tokens on export.
## What PaperCraft does with it
| Package | PaperCraft |
|---|---|
| a hex color in `:root` | a **variable** (`--bg`), the thing a fill follows |
| any other value in `:root` | a **token** (`--spacing-md`), substituted into styles when they are written |
| a hex color in `[data-theme="Dark"]` | the **mode** `Dark` |
The rules, in full:
* **Colors are hex only.** PaperCraft colors are `#rrggbb` / `#rrggbbaa`. A value PaperCraft
cannot hold — an `oklch()`, an `rgb()`, a named color — is kept as a token with the value
as it is, so nothing is lost.
* **The import replaces** the variables, the modes and the tokens of the project, on every
page, in one undo step (like `set_variables`). Undo brings the old ones back.
* **The base theme stays live.** After an import no mode is active, so the `:root` values
are the ones on the canvas. Pick another mode with `set_variable_mode`.
* **Names are made CSS-safe**: letters, digits, `-` and `_`. Everything else becomes `-`, so
`--Brand Color` is imported as `--Brand-Color`.
* **A mode holds colors only.** A size inside a `[data-theme]` block cannot be stored per
mode, so it becomes a plain token.
* **A package is identified by its folder.** The `id` in the manifest must be the slug of the
folder it lives in (`my-system`). The export writes the slug of the target folder as the
id.
## The tools
### `import_design_system`
```sh
papercraft-cli call import_design_system '{"path":"/path/to/my-system"}'
```
| Argument | Type | Notes |
|---|---|---|
| `path` | string | The folder of the package. Required. |
| `pageId` | string | Optional. The design system is project-wide, so it lands on every page. |
It answers with what came in:
```json
{
"package": { "id": "my-system", "name": "My System", "category": "product" },
"variables": 2, "modes": 1, "tokens": 1,
"pages": 3, "fillsUpdated": 4, "design": true
}
```
A malformed package is an error, never a crash: a broken `manifest.json`, a missing
`tokens.css`, an id that is not a slug or a `schemaVersion` PaperCraft does not know all come
back as a message.
### `export_design_system`
```sh
papercraft-cli call export_design_system '{"path":"/path/to/my-system"}'
```
| Argument | Type | Notes |
|---|---|---|
| `path` | string | The folder to write the package into. Created if it is not there. Required. |
| `pageId` | string | Optional. The page whose design system is written. |
It writes `manifest.json`, `tokens.css` and `DESIGN.md` and answers with their paths. The
`tokens.css` is the same shape the import reads, so a package survives the round trip.
## Attribution
The package format is the one published by
[OpenDesign](https://github.com/nexu-io/open-design) (Apache-2.0). PaperCraft reimplements
the format from its description; no file of that project is copied. See
[THIRD_PARTY.md](../THIRD_PARTY.md).
+70 -9
View File
@@ -1,23 +1,53 @@
# Design systems in PaperCraft
A PaperCraft project can hold a small design system: color variables, components with instances, and icon sets. Today these are built and managed through the tools (MCP or `papercraft-cli`); the editor shows the results but has no panel for them yet (see [ROADMAP.md](../ROADMAP.md)).
A PaperCraft project can hold a design system: collections of typed variables with modes, components usable from any page, icon sets, and libraries that other projects can enable. The editor has a Variables modal, a Libraries modal and an Assets view for them (see [ROADMAP.md](../ROADMAP.md)); the same things are available through the tools (MCP or `papercraft-cli`).
## Variables
Named colors per project. Define them once, use them as `var(--name)`:
Variables live in **collections**. A collection has one or more **modes** (`Light`, `Dark`) and each variable has one value per mode. The project stores them in `design.json` next to `project.json`; every page keeps a derived copy that the renderer, lint and exports read, rebuilt on every change. A change from the UI or a tool updates every page in one undo step per page.
```sh
papercraft-cli call set_variables '{"variables":{"surface":"#313244","accent":"#cba6f7","on-accent":"#11111b"}}'
papercraft-cli call set_variables '{"collection":"Spacing","type":"number","variables":{"space/md":16,"space/lg":{"value":24}}}'
papercraft-cli call set_variables '{"variables":{"accent-hover":{"alias":"accent"}}}'
```
* Use `var(--name)` in `write_html`, `update_styles` and `create_artboard` for `background`, `backgroundColor` and `color`. The fill stays linked and the link is saved in the file.
* Calling `set_variables` again with a new value moves every linked fill, on every page, in one undo step.
* **Modes.** `set_variables {"mode":"Dark", ...}` stores one set of values for a mode; define another mode the same way. The first mode you define is active. `set_variable_mode {"mode":"Light"}` switches the whole project.
* `get_variables` lists the variables and modes. With `"format":"css"` it returns a `:root { --name: #hex }` block, with `"json"` a design-tokens object (`{"accent":{"$type":"color","$value":"#cba6f7"}}`).
* **Limits.** Colors only. Fills and text color follow variables; strokes and gradients get the resolved color at write time and do not follow later changes. No spacing, radius or font-size variables yet.
* **Types.** `color`, `number`, `string`, `boolean`. Numbers have no unit and bind as px. Strings are substituted as text (a font family, a shadow). Booleans bind to layer visibility. An alias points at a variable of the same type, in any collection or enabled library, and resolves per mode. A cycle is refused.
* **Groups.** A name is split on `/`: `color/brand/primary` sits in the group `color/brand`. Renaming a group in the Variables modal renames every variable under it and the bindings follow.
* **CSS names.** The name's segments joined with `-`, sanitized: `--color-brand-primary`. Use `var(--color-brand-primary)` in `write_html`, `update_styles` and `create_artboard` for `background`, `backgroundColor` and `color`. Two variables with the same CSS name across the collections of a project (library ones included) are refused when written.
* **Modes.** The active mode is chosen per page and per collection (Design tab), not per project; a new page inherits the active page's choice. `set_variables {"mode":"Dark", ...}` stores values for a mode, and the first mode you define is active. `set_variable_mode {"mode":"Light"}` switches the whole project. `create_collection {"name":"Brand","modes":["Light","Dark"]}` makes a collection with its modes up front.
* **Reading and exporting.** `get_variables` returns the collections (id, groups, type, value per mode, aliases, description, hidden), `pageModes`, and the older `variables` and `tokens` maps. With `"format":"css"` it returns a `:root { --name: #hex }` block plus `[data-theme]` rules for modes, with `"json"` a design-tokens object where groups nest on `/` and aliases are `{group.name}`, with `"tailwind"` an `@theme` block. Copy CSS, JSON and Tailwind are in the Variables modal too.
* **Deleting.** `delete_variables {"names":[...]}` refuses a variable that another one aliases and names the dependents; `"force":true` detaches them to the resolved value first. In the UI the same asks for confirmation. A removal affects every page.
* **Hidden.** A variable marked `hidden` stays in the file and is left out of published libraries.
Naming that works: roles, not hues (`surface`, `text-muted`, `accent`, `on-accent`, `danger`), so a mode can change the value without changing the meaning.
### Bindings
A fill that was written with `var(--name)` stays linked. Other fields bind with `bind_variable {"nodeIds":[...],"field":"gap","variable":"space/md"}` or with the variable button next to the field in the inspector. A bound field shows the variable as a chip with a detach button; detaching keeps the current value. `variable` may be the name or the CSS name; `null` detaches.
| Field | Type | Applies to |
|---|---|---|
| `stroke`, `text-color` | color | stroke color, text color |
| `width`, `height` | number | size in px |
| `gap` | number | auto-layout gap |
| `padding`, `padding-top`, `padding-right`, `padding-bottom`, `padding-left` | number | auto-layout padding (`padding` sets all four) |
| `radius` | number | corner radius |
| `font-size` | number | text size |
| `line-height` | number | below 4 it is a multiplier (`1.5`), from 4 up it is px |
| `opacity` | number | 0 to 1, values outside are clamped |
| `visible` | boolean | layer visibility |
A bound field is applied again when the variable, an alias target or the page's mode changes. Instances take bindings from their main; changing a bound field on an instance is an override for that instance only. Gradients cannot be bound yet.
### Migration
Projects made before collections open as project version 2: the first page's colors and modes become the collection `Colors`, its tokens become `Tokens` (a `16px` value becomes a number, anything else, including a unitless `1.5`, stays a string). CSS names do not change, so existing fill bindings keep working. PaperCraft 0.4.0 does not know `design.json`, so it refuses a migrated project with "made by a newer PaperCraft" instead of writing pages that would drift from it. Update before opening such a project on another machine.
### Variables modal
Open it from the Design tab ("Open variables"), the command palette (`Variables…`) or ⌘⌥⇧V. Collections of this file are on the left, then each enabled library (read-only), each with its group tree. The table has one row per variable in the selected group and one column per mode; cells edit in place (swatch and hex, number, text, toggle) and an alias picker links to another variable. Add a variable (choose its type), a mode or a collection from the header; rename, delete, search and a details pane (description, hidden, CSS name, how many layers use it) are there too.
## Components and instances
```sh
@@ -29,8 +59,9 @@ papercraft-cli call set_text_content '{"updates":[{"nodeId":"<label layer id fro
* Build the main component as a frame (usually its own artboard), then convert it. Name it `Component / Variant`.
* `create_instance` returns the instance id and its layers, so you can set text and styles on them. Changes made through `set_text_content` or `update_styles` on an instance are recorded as overrides; everything else follows the main component.
* In `write_html`, `<x-paper-instance component-id="<id>" layer-name="Button / Save"/>` places an instance inline.
* `get_components` lists main components and how many instances each has.
* **Limits.** Components and their instances must be on the same page. No variants or properties: model variants as separate components (`Button / Primary`, `Button / Secondary`). In the editor, detach with ⌘⌥B; there is no detach or swap tool.
* `get_components` lists the main components of every page (and library components) with `componentKey`, page and how many instances each has.
* **Across pages.** Instances can be placed from a main on any page: `create_instance` and `swap_instance` take a `componentId` (`pageId:num`) or a `componentKey` (stable, from `get_components`). Editing a main on page A updates its instances on every other page, one undo step per page. If the main is deleted its instances stay as they are, marked "Main missing" in Assets, where you can detach them. `<x-paper-instance component="Name"/>` in `write_html` links the same way when the main is on another page (it used to copy the main onto the page). `import_components` still copies mains onto a page, detached from the source; it is for moving a design system, not for using components.
* **Limits.** No variants or properties: model variants as separate components (`Button / Primary`, `Button / Secondary`). `detach_instance` and `swap_instance` exist as tools; in the editor detach with ⌘⌥B.
## Icons
@@ -42,6 +73,12 @@ papercraft-cli call set_text_content '{"updates":[{"nodeId":"<label layer id fro
Fill-based sets (Phosphor, Material) follow variables; Lucide is stroke-based and keeps a fixed color.
> **Known limitation.** An icon's *stroke* color is frozen at import time: the value of the
> variable is baked into the stroke, so a stroke-based icon (Lucide, Tabler, Heroicons) does
> not follow the variable when it changes later. A layer's `stroke` can follow a variable with
> `bind_variable`; the icon's own stroke does not. A `var(--x)` that does not exist is reported as a warning
> and the icon keeps the color it inherits.
## Lint
`lint_design` checks a subtree or the page and returns issues with a rule, a severity and a fix:
@@ -58,6 +95,30 @@ Fill-based sets (Phosphor, Material) follow variables; Lucide is stroke-based an
Instances are skipped (their main component is linted). The rules are conventions, not law: pass `scale` to match your own type scale and ignore `info` items you disagree with. Lint does not judge taste; always look at `get_screenshot` too.
## Libraries
Any project can publish itself as a library, and other projects can enable it. This is a published snapshot, as in Figma, not a live link.
* **Publish.** Libraries modal, tab "This file", or `publish_library`. It writes `library.json` in the project folder with a version counter, the non-hidden variables, and every main component whose name does not start with `_` or `.`, each with its layers and a 256px preview. Before publishing the modal shows what changed since the last publish ("3 variables changed, 1 component added"); the tool returns the same list.
* **Enable.** Every project in the store with a `library.json` is available (projects synced from other devices through the relay show up too). `enable_library {"libraryId":...}` or the toggle in the Libraries modal copies the snapshot into the project (`libraries/<id>.json`). Its variables show read-only in the Variables modal and can be bound and aliased; its components show in Assets and are placed with `create_instance {"componentKey":...}`. Enabling is refused if a CSS name already exists in the project.
* **Updates.** When the published version is newer than the copy, the Libraries modal tab "Updates" and a dot on the Assets tab say so, and `list_libraries` reports `updateAvailable`. The review lists changed variables and components. `update_library` (or Update in the modal) replaces the snapshot, rebuilds every page and re-syncs the library's instances; instance overrides are kept. Updates are never applied by themselves.
* **Missing source.** If the library's project is deleted or not in the store, the copy keeps working. The modal shows "Source not found" and `list_libraries` shows `sourceFound: false`.
* **Disable.** `disable_library` or the toggle (after a confirm when it is in use) stops using a library: bindings to its variables are detached and keep the resolved value, local variables that aliased it keep the resolved value, its instances become plain frames, and its variables and components leave the project. One undo step per page.
Open the Libraries modal from the Share menu (`Libraries…`), the command palette, or the Assets header.
## Assets
The Assets view (side panel tab) replaces the old Library tab. It has a search box and sections for this file (by page), each enabled library, and My shapes (the personal shape library). Components are grouped by the part of the name before the first ` / ` (`Button / Primary` is in group `Button`) and shown as previews. Click one to place it at the viewport center, or drag it onto the canvas. Instances whose main was deleted are listed as "Main missing" with a detach action.
## Packages
A design system can travel as an **OpenDesign design-system package**: a folder with
`manifest.json`, `tokens.css` and `DESIGN.md`. `import_design_system` reads one into the
project (colors become variables, `[data-theme]` blocks become modes, everything else becomes
a token) and `export_design_system` writes one back. The format, the rules and the tools are
in [design-system-packages.md](design-system-packages.md).
## Worked example
[`examples/taskflow.py`](../examples/taskflow.py) builds an 8-screen app: a Catppuccin theme as variables (the only place hex appears), components for buttons, fields, chips, task rows, toggles and tab bars, Phosphor icons, and a design-system page of swatches. Run it against the running app after `papercraft-cli icons add phosphor`.
+27
View File
@@ -0,0 +1,27 @@
# Feature ideas
Ranked by value for the effort. Done items say where.
## Done
* Prototype links: click a layer in Present mode to jump to a frame (inspector, Prototype tab).
* Drop-shadow effect in the inspector.
* Saved versions with rename, restore, delete (also in the browser).
* Comments filters, reopen, delete; agent activity log with failures, copy agent URL.
* Agent activity pill and canvas glow while an agent works; layers pop in.
* Merge of concurrent edits to one shared page (`src/merge.rs`, `src/sync.rs`).
* Interface scale in Settings and the command palette (native).
* Export presets (inspector Export "+").
* Shared libraries: publish a project as a library, enable and update it in others (`src/libraries.rs`, Libraries modal); cross-page components; number variables.
* Design from the CLI with the app closed (`papercraft-cli --offline`, `shell`).
* Auto versions before agent edits: each agent run snapshots edited pages and can be reviewed or reverted (`src/runs.rs`, Agent view).
## Next
1. **Presence on shared projects**: show who else is in the file (coloured cursors and selection outlines). NotesCraft `crates/collab` already has rooms and presence; reuse once it is a shared crate.
2. **Version compare**: pick two saved versions and show a diff overlay (added, changed, removed layers) using the id-paired `diff_pages` in `src/mcp/diff.rs`; compare UI is still todo.
4. **Smart transitions in Present mode**: animate matching layers (same name) between frames instead of cutting.
5. **Hover and pressed states for components**: variants (`Button / Primary / Hover`) switched in Present mode on pointer events.
6. **Layer blur and background blur**: needs a renderer pass; unlocks glass effects and the Layer "+" in the design.
7. **Comment threads with replies from people, mentions, and a canvas pin that opens the thread**.
8. **Flatten menus into icon toolbars**: the Share menu and the folded Menu are flat lists; next is an icon rail for the most used actions with labels on hover.
9. **Window**: Windows asks the system for rounded corners and keeps the shadow. On Linux the window manager (or the Wayland client-side frame) draws the frame, and it is round on GNOME and KDE. A frame drawn by the app needs three things that cannot be checked without a Linux desktop: a transparent surface, a paint callback that clears the four corners with replace blending (egui cannot erase pixels it has already drawn), and its own edge resizing through `drag_resize_window`. Not built for that reason.
10. **One design-system package per brand** imported by every app's design file, plus a token export that generates the theme code (see `docs/shared-libs.md`). Publishing the brand project as a library covers the sharing; the generated theme code is still todo.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 KiB

After

Width:  |  Height:  |  Size: 718 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 KiB

After

Width:  |  Height:  |  Size: 673 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 KiB

After

Width:  |  Height:  |  Size: 604 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

+4 -4
View File
@@ -829,17 +829,17 @@
{
"x": 142.7313747183631,
"y": 67.81241721188927,
"p": 0.9250766936018474
"p": 0.9250766936018473
},
{
"x": 142.83557265660113,
"y": 68.98997073270611,
"p": 0.9252498892277686
"p": 0.9252498892277685
},
{
"x": 142.91529122236636,
"y": 70.16687559063168,
"p": 0.9254230848536898
"p": 0.9254230848536897
},
{
"x": 142.99107079135058,
@@ -1539,7 +1539,7 @@
{
"x": 9.60011583032815,
"y": 98.55159622270405,
"p": 0.9218371254373118
"p": 0.9218371254373117
},
{
"x": 8.94230892173482,
Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 KiB

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 KiB

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 KiB

After

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 KiB

After

Width:  |  Height:  |  Size: 691 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 KiB

After

Width:  |  Height:  |  Size: 709 KiB

Some files were not shown because too many files have changed in this diff Show More