81 Commits

Author SHA1 Message Date
Marcos Paulo ec7f1f8a14 feat(ui): refresh-rate frame cap, Task Manager-accurate RAM/CPU, menu toggle and themed close button
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 08:55:37 -03:00
Marcos Paulo 24f6c797f2 chore(release): 0.8.1
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 01:16:28 -03:00
Marcos Paulo a2885a3283 perf(ui): cache the Design tab's lint and feedback until the document changes
The tab ran the design lint over every node, and scanned every node for open
comments, on every frame. On a 12.6k-node page that cost hundreds of ms per
frame (377 ms worst) while the tab was open. Both results are now kept per
(doc_stamp, active page); the open-feedback count of other pages refreshes once
a second.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 01:14:34 -03:00
Marcos Paulo 0143f1e465 feat(perf): RAM and CPU on Windows; refresh rates up to 360 Hz
The performance overlay showed n/a for RAM and CPU on Windows: the readings
existed only for macOS and Linux. They now come from GetProcessMemoryInfo
(working set) and GetProcessTimes (kernel plus user time).

The "Warn below" chips become "Refresh rate" and now go up to 144, 165, 240
and 360, for high-refresh monitors. The default stays 60.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 01:14:34 -03:00
Marcos Paulo dc57f9af20 feat(ui): window buttons in the toolbar on Windows/Linux; controls and acrylic from craft-ui
- Drop the separate title bar: minimize/maximize/close sit at the toolbar's right,
  its empty middle drags the window (double-click maximizes). Home gets the same.
- Linux is undecorated too, with edge resize.
- Settings pages fill the modal height and scroll (Appearance rendered empty).
- Checkbox, toggle, select and the acrylic material now come from craft-ui.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 00:44:02 -03:00
Marcos Paulo 984ede7d55 chore(release): 0.8.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:57:42 -03:00
Marcos Paulo fc398bd1f9 feat: screens, packed pages, per-layer change log and canvas perf
- Screens: frames can be declared screens or overlays (set_screens, inspector toggles,
  "Declare N screens"). Agent edits to layers hidden behind a drawer/modal in a screen
  are refused unless allowHidden; partly covered ones are reported. get_basic_info lists
  screens, get_node_info reports visibility, lint skips hidden layers, On click lists
  screens, nested screens get canvas labels. Spec in specs/screens.
- Pages and versions are stored as zstd-compressed compact JSON (.json.zst, format v3);
  legacy .json still reads and is replaced on save.
- Editor keeps a per-layer change log; the scene cache re-tessellates only changed layers
  and no longer keeps a copy of every node (less RAM).
- Canvas perf: zoom settle and LOD, 24-byte vertices, vsync-paced redraws, idle hover
  skip, malloc relief when idle, off-screen frame labels skipped, layer-panel heights
  memoized across frames, run recount on a background thread.
- Frame labels: no label on tiny frames, overlapping labels dropped, ellipsis.
- Selects: menu sizes to content (capped), path labels keep the name, scroll, tooltips.
- Settings: performance monitor page, agent logos, chat page scroll fix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:55:43 -03:00
Marcos Paulo 75faf3efaa feat(ui): acrylic material, appearance options, chat polish, perf monitor; enforcer fixes
Appearance: acrylic material with popup and modal backing, corner radius,
UI font (bundled DM Sans, Figtree, Fredoka, Geist, Nunito, Quicksand,
Varela Round), accent colour. Icons on buttons, code targets and agent
logos; redesigned fill/gradient and auto-layout rows; compact topbar.

Chat: agent logo in the header, history popup with search and recency
groups, new-chat button, issue outcomes saved with the chat and issue
bodies shown as fields, question cards with one-click answers, number
keys, an inline other-answer field and an answered state.

Layers: right-click context menu. Performance: virtualised layer reveal,
pruned hit-testing, glyph cache. Settings > Performance: FPS, frame time,
RAM, CPU and GPU overlay with a slow-frame warning.

MCP: compact spec writes bound strokes as variables (#23), lint contrast
averages gradient and translucent backgrounds (#24), lint flags light/dark
theme copies (#25).

Closes #23, closes #24, closes #25

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 18:02:23 -03:00
Marcos Paulo 4f5dd1f399 install-local: build in the repo's target dir; keep only the newest app backup
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-25 18:22:33 -03:00
Marcos Paulo 033ae23b7c feat(enforcer): Tailwind v4 utilities (bg-primary, text-muted-foreground/80) count as token references
verify_code flagged every shadcn/Tailwind screen as hard-coded because it only looked for
var(--name) and --color-name in the code text.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-25 17:42:43 -03:00
Marcos Paulo a0be70d5a6 fix(enforcer): verify_code no longer panics on multibyte layer names in the code
strip_token_declaration_blocks sliced rest[..n] on a byte index that could fall inside a
multibyte char; a screen whose labels say "Rótulo" took the app down mid-call. Regression test
with a ~10 KB multi-file React module.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-25 17:40:04 -03:00
Marcos Paulo ef29427877 feat(mcp): compact design spec and project inventory for design-to-code pipelines
get_design_spec {format:"compact"} renders one line per node with tokens used, kit
components, component definitions and notes; no reference code or per-node enforcement
prose. About 12x fewer tokens than the JSON spec (a 1440x960 screen: ~7k vs ~93k).

get_inventory returns every page's screens with a size class (mobile, tablet, desktop,
email, pdf-a4), component/instance/annotation counts, notes still marked `? (team)`,
every component and the token group sizes in one call.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-25 17:05:02 -03:00
Marcos Paulo 2af0155e6a feat(props modal): tabs, table and highlighted source views, variable colours; overlays under modals
The properties modal gets a tab per property, a Table view (colour cells
pick project variables, visibility toggles, icon, image and text fields)
and a Source view with JSON highlighting, neutral styling and one text
size. Canvas overlays move below modals; segmented controls key ids by
their labels so two in one row both respond. The status template writes
known colours as variables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:21:23 -03:00
Marcos Paulo 8130c5cc68 fix(merge_variants): moved instances keep their nested instances' own values
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:09:35 -03:00
Marcos Paulo 67d23a229f fix(props): a nested instance's properties are found through the outer main
A badge inside a row links to a layer of the row's main; its properties
live on the component that layer is an instance of. Follow the links.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:05:03 -03:00
Marcos Paulo 6c9515c385 feat: properties modal for main components; simpler inline list
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:58:01 -03:00
Marcos Paulo d4f12f6773 fix(merge_variants): moved instances keep their texts; options carry nested instance state
An instance moved from a variant kept only its overrides, so texts that
came from the variant turned into the base's. They are restored now
(except state texts). A nested instance's property values (a badge's
Tone) are compared and become props in the options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:52:40 -03:00
Marcos Paulo 65a70996c4 feat(merge_variants): textLayers, so only state texts (a badge label) join the options
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:46:12 -03:00
Marcos Paulo 2b8443a1b1 feat: set_prototype_links for agents; merge_variants compares icon colours
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:06:48 -03:00
Marcos Paulo c169058915 fix: keep legacy nested replacements as swaps on sync; icons drawn once at their size
- Sync converted away an instance written over a nested one (older
  storage: its own root, no swap) and lost it; it now becomes a swap of
  the main's child at that place.
- The parser lowercases attribute names, so icon and plugin code never
  dropped the SVG's own viewBox; with the viewBox fit that scaled icons
  twice. Compare names without case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:49:06 -03:00
Marcos Paulo 4c2003d05e fix(merge_variants): empty frames' arrangement and flex-shrink do not block a merge
An empty base takes the variant's arrangement when it gains that variant's
layers, so a check lands centred like in the variant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:38:07 -03:00
Marcos Paulo 42bb758383 feat(merge_variants): grow the base with hidden layers, extend an existing enum, refuse one-option merges
Layers a variant has and the base lacks are copied into the base hidden,
and that option shows them. Icons are compared as one unit. A base that
already has the enum keeps its options and gains the new ones; its
instances keep their values. Fewer than two mergeable variants changes
nothing. Removing a property clears its values on instances.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:29:07 -03:00
Marcos Paulo 26dab9b26b fix(merge_variants): leave out variants that differ in layout, size or spacing
Such differences cannot be an option's changes and would be lost; the
variant stays as it was and the warning names the properties. A main's
own canvas position is ignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:20:27 -03:00
Marcos Paulo d1a4129323 feat: merge_variants; absolute children stay pinned in scrolling screens
merge_variants turns per-state components into one with an enum property:
variant differences by layer path become options, instances on every page
move to the base with their value, emptied variants are deleted. Absolute
children of a scrolling screen stay put while its content scrolls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:13:41 -03:00
Marcos Paulo a283ddf457 fix(layout): hug children re-measure after a stretch gives them their width
A hug frame whose width comes from its parent kept the height measured
while its text was narrow (1404px instead of 84px). After arranging, a
stale hug child lays out again and the frame measures once more.
Closes #22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:05:12 -03:00
Marcos Paulo b172762288 feat: component properties (enum, text, bool, icon) with templates
Main components define properties; instances keep values as overrides, so
main edits keep them and definition changes re-apply everywhere. Enum
options use the overrides format and can restyle, retext, show, hide or
re-icon any layer. Templates: text, active (tab bars, navs), status.
set_component_props, set_instance_props, props= on <x-paper-instance>,
get_components lists them, {Prop} in code links, inspector controls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:01:34 -03:00
Marcos Paulo b3da7e84d8 feat: scrolling screens: fixed size, overflow scrolls on the canvas and in Present
A frame's scroll flag (overflow: auto|scroll) keeps it fixed height and
clipped; the wheel over it scrolls its content, then pans when the content
ends. The offset is view state and flows through parent_origin, so hit
tests and overlays follow. Toggles beside each screen, on a selected frame
and for every screen on the page. Agents keep screens at their size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:44:47 -03:00
Marcos Paulo 96989be616 fix: borders over clipped children, border variables stay bound, fit-content around growing children
- A clipping frame draws its border after its children. Closes #19.
- border: ... var(--x) binds the stroke; reads show var(--x); find_nodes
  says when it stopped at 500. Closes #20.
- Hug frames grow around flex-grow children; a min height stays and the
  growing child fills it. Closes #21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:33:48 -03:00
Marcos Paulo 9514f15073 feat: follow agents on the canvas; skeletons while an agent writes
- Settings, Chat, Follow agents (on by default): the canvas pans and
  switches page to the layer any agent changes, in both modes.
- Claude Code and the API announce a tool call as it starts streaming
  (ToolDraft, ToolInput); the canvas shows a skeleton over its target, or
  where a new artboard goes, until it has run. New agent content comes in
  through a fading skeleton, so an outline never frames empty space.
- Top bar: the title and agent pill leave room measured from the right-hand
  buttons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:21:09 -03:00
Marcos Paulo 1a57eccd38 fix(lint): report and bind hard-coded borders that equal a color variable
lint_design warns on a border whose hex equals a color variable, and
fix: true binds it (stroke), so switching the variable mode reaches it.
Closes #18.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 03:58:55 -03:00
Marcos Paulo fdfd82207d fix: svg viewBox fit, notes off narrow screens, icon-aware not-an-instance, instance text width
- write_html fits an <svg> viewBox into its width and height. Closes #14.
- A note whose target sits straight in its artboard treats the artboard as
  the screen, so tidy keeps cards off it. Closes #15.
- not-an-instance needs the same icon, and its fix names the
  <x-paper-instance> to write. Closes #16.
- Instances with their own text re-measure it when the main changes.
  Closes #17.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 03:51:06 -03:00
Marcos Paulo 6e32acfeff chore(release): 0.7.3 2026-10-25 00:22:21 -03:00
Marcos Paulo 999e9cbc36 fix: isolate dev chat settings, bound text colour in computed styles, composer and top bar overflow
- PAPERCRAFT_HOME also holds the chat settings (/.config),
  so a test copy never touches the installed app's.
- get_computed_styles reports a text colour bound to a variable as
  var(--name). Closes #13.
- Composer chips wrap instead of running under Stop and Add; the agent pill
  drops its text when it would run under the top bar's buttons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 00:08:19 -03:00
Marcos Paulo c71f9f3dc2 docs(screenshots): refresh test renders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 23:56:39 -03:00
Marcos Paulo d3e0351d05 feat(chat): auto mode; Present uses a play icon like its neighbours
Auto (a composer chip) answers the questions a turn ends on with their
recommended options and goes on, until Stop or the turn budget; the agent
is told to put its recommendation first and default what only the user
knows. The Present button draws a play icon on the shared icon grid, and
the composer's Enter hint hides when the chips need the room.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:26:16 -03:00
Marcos Paulo 4108ecdce9 fix: swapped nested instances count for their component; tests stop rewriting docs screenshots
get_components uses, the design-system digest, the AI spec's instanceOf,
the component list in exports and set_code_link read a swapped nested
instance's swap target instead of its place in the outer main.

Test screenshots go to the build's temp folder; PAPERCRAFT_UPDATE_SHOTS=1
writes docs/screenshots as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:04:35 -03:00
Marcos Paulo 4bf3e2a1df feat(chat): add messages to a running turn
Add (or Enter) while a turn works queues the message; it goes out with the
agent's next PaperCraft tool result for that chat, so every backend reads it
mid-turn. The composer shows each as Waiting or Seen; what no tool call
picked up is sent next when the turn ends, or returns to the box after Stop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:50:15 -03:00
Marcos Paulo e9da5eeba5 feat: QA sub-agent and helper agents; fix cross-page moves, nested instance swaps and moved notes
- Claude Code chats get a Sonnet qa sub-agent that lints and screenshots
  built frames and returns only findings.
- delegate hands qa, read or build tasks to a helper agent CLI (pi with
  MiniMax M3.1 Flash, opencode, any command taking {prompt}) that drives
  PaperCraft through papercraft-cli; Settings, Chat, Helper. The chat's Stop
  button also ends a running helper and what it started.
- move_nodes to another page keeps component keys, relinks every instance
  and takes the moved nodes' annotations along; rename_file renames a
  project. Closes #10, closes #12.
- A nested instance swapped inside an instance is a swap override that
  survives edits to the outer main, copies and the code export. Closes #11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 21:45:04 -03:00
Marcos Paulo d934f4ca89 chore(release): 0.7.2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:51:09 -03:00
Marcos Paulo 5b54f9a7be feat: UI kits and code links, issues from the app, design-playbook rules, one-row top bar
- Code links on main components (import plus React and egui usage templates);
  linked instances export as library code and the AI spec lists them as
  library components instead of their layers.
- apply_ui_kit builds shadcn/ui, Ant Design, React Bits and egui kits; the
  chat brief asks for the code library and builds from its components.
- report_issue drafts and a Report a PaperCraft issue form file on the
  configured repository (keychain token or tea login), de-duplicated by title.
- design_rules looks up design-playbook rules through the playbook CLI; the
  brief asks whether to follow it.
- Top bar: project name and page picker on one centred row, so the bar no
  longer overflows onto the canvas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:50:52 -03:00
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
942 changed files with 66191 additions and 2675 deletions
+1
View File
@@ -5,3 +5,4 @@ dist/
app.asar.unpacked/
web/pkg/
.worktrees/
.oc-agents/
@@ -0,0 +1,2 @@
[ 3482ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 3531ms] [LOG] [HMR] connected @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
@@ -0,0 +1,9 @@
[ 210ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 1039ms] [LOG] [Fast Refresh] done in 930ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 1076ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 1086ms] [LOG] [HMR] connected @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 37298ms] [ERROR] Pattern attribute value [0-9() -]{10,16} is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /[0-9() -]{10,16}/v: Invalid character in character class @ http://localhost:3000/motorista/entrar:0
[ 60872ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 60976ms] [LOG] [Fast Refresh] done in 99ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 61021ms] [LOG] [Fast Refresh] done in 99ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 66490ms] [LOG] [Fast Refresh] done in 99ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
@@ -0,0 +1,13 @@
[ 93ms] [LOG] [Fast Refresh] done in 99ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 953ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 963ms] [LOG] [HMR] connected @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 4345ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 4433ms] [LOG] [Fast Refresh] done in 189ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 4548ms] [VERBOSE] [DOM] Password forms should have (optionally hidden) username fields for accessibility: (More info: https://goo.gl/9p2vKq) %o @ http://localhost:3000/entrar/senha:0
[ 9731ms] [LOG] [Fast Refresh] done in 5486ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 9777ms] [LOG] [Fast Refresh] done in 5486ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 11070ms] [LOG] [Fast Refresh] done in 5486ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 30758ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=fBVPvwqt_6CU4TU3WWYmu' failed: @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 31764ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=fBVPvwqt_6CU4TU3WWYmu' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 32766ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=fBVPvwqt_6CU4TU3WWYmu' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 33776ms] [LOG] [HMR] connected @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
@@ -0,0 +1,79 @@
[ 805ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 813ms] [LOG] [HMR] connected @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 1121ms] [VERBOSE] [DOM] Password forms should have (optionally hidden) username fields for accessibility: (More info: https://goo.gl/9p2vKq) %o @ http://localhost:3000/entrar/senha:0
[ 2267ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 2310ms] [LOG] [Fast Refresh] done in 144ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 9621ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 9763ms] [LOG] [Fast Refresh] done in 243ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 48693ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 48749ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 48826ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 51025ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 51539ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 51907ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 107213ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 118297ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 123464ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 125669ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 125771ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 126799ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 126941ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 127929ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 127981ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 154930ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 156620ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 157845ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158106ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158454ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158504ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158748ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158848ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 158955ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 159307ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 159399ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 159488ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 159901ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 159993ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 187894ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 188000ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 205603ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 207208ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 207296ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 207951ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208126ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208244ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208353ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208415ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208590ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208695ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208794ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208878ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 208986ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 209132ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 209234ms] [LOG] [Fast Refresh] done in 39171ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 228278ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 228308ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 238991ms] [LOG] [Fast Refresh] done in 10713ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 239037ms] [LOG] [Fast Refresh] done in 10713ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 239175ms] [LOG] [Fast Refresh] rebuilding @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 239206ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 239602ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 239697ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 264111ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 265916ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 321743ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 333352ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 369410ms] [LOG] [Fast Refresh] done in 3ms @ http://localhost:3000/_next/static/chunks/1bba_next_dist_041c6vio7na_y._.js:719
[ 413886ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 414902ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 415904ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 416906ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 417908ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 418911ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 423918ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 428928ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 433950ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 438984ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 444022ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 449184ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
[ 454479ms] [ERROR] WebSocket connection to 'ws://localhost:3000/_next/hmr?id=ruCdDO_vey1tElDs8WYR0' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED @ http://localhost:3000/_next/static/chunks/1bba_next_dist_client_0ru2jkh0js1s8._.js:16225
@@ -0,0 +1,28 @@
- generic [ref=e2]:
- complementary [ref=e3]:
- generic [ref=e8]:
- generic [ref=e9]: Rota Fresca
- generic [ref=e10]: Distribuição de alimentos
- generic [ref=e11]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=e12]
- paragraph [ref=e13]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=e14]:
- link "Precisa de ajuda?" [ref=e16] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=e17]:
- generic [ref=e18]:
- heading "Entrar" [level=1] [ref=e19]
- paragraph [ref=e20]: Use o e-mail da sua conta. Conforme o tipo de conta, pedimos a senha ou mandamos um link de acesso.
- generic [ref=e21]:
- generic [ref=e22]:
- generic [ref=e23]: E-mail
- textbox "E-mail" [ref=e24]:
- /placeholder: nome@empresa.com.br
- button "Continuar" [ref=e25]
- generic [ref=e26]: ou
- generic [ref=e33]:
- paragraph [ref=e34]: É motorista?
- paragraph [ref=e35]: Entre pelo app Rota Fresca no celular, com o seu número. Não precisa de e-mail.
- generic [ref=e36]:
- paragraph [ref=e37]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=e38]: Termos de uso · Privacidade
@@ -0,0 +1,20 @@
- generic [active] [ref=f1e1]:
- generic [ref=f1e2]:
- generic [ref=f1e3]:
- generic [ref=f1e8]:
- generic [ref=f1e9]: Rota Fresca
- generic [ref=f1e10]: App do motorista
- banner [ref=f1e11]:
- heading "Entrar" [level=1] [ref=f1e12]
- paragraph [ref=f1e13]: Use o número de celular que a central cadastrou. Mandamos um código, sem senha.
- generic [ref=f1e14]:
- generic [ref=f1e15]: Celular
- generic [ref=f1e16]:
- generic [ref=f1e17]: "+55"
- textbox "(21) 98877-4410" [ref=f1e18]
- generic [ref=f1e19]:
- button "Receber código no WhatsApp" [ref=f1e20]
- button "Receber por SMS" [ref=f1e21]
- paragraph [ref=f1e22]: Trocou de número? Fale com a central.
- button "Open Next.js Dev Tools" [ref=f1e28] [cursor=pointer]
- alert [ref=f1e32]
@@ -0,0 +1,32 @@
- generic [active] [ref=f2e1]:
- generic [ref=f2e2]:
- complementary [ref=f2e3]:
- generic [ref=f2e9]:
- generic [ref=f2e10]: Rota Fresca
- generic [ref=f2e11]: Distribuição de alimentos
- generic [ref=f2e12]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f2e13]
- paragraph [ref=f2e14]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f2e15]:
- link "Precisa de ajuda?" [ref=f2e17] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f2e18]:
- generic [ref=f2e19]:
- heading "Entrar" [level=1] [ref=f2e20]
- paragraph [ref=f2e21]: Use o e-mail da sua conta. Conforme o tipo de conta, pedimos a senha ou mandamos um link de acesso.
- generic [ref=f2e22]:
- generic [ref=f2e23]:
- generic [ref=f2e24]: E-mail
- textbox "E-mail" [ref=f2e25]:
- /placeholder: nome@empresa.com.br
- button "Continuar" [ref=f2e26]
- generic [ref=f2e27]: ou
- button "Entrar com chave de acesso (passkey)" [ref=f2e31]
- generic [ref=f2e35]:
- paragraph [ref=f2e36]: É motorista?
- paragraph [ref=f2e37]: Entre pelo app Rota Fresca no celular, com o seu número. Não precisa de e-mail.
- generic [ref=f2e38]:
- paragraph [ref=f2e39]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f2e40]: Termos de uso · Privacidade
- button "Open Next.js Dev Tools" [ref=f2e46] [cursor=pointer]
- alert [ref=f2e50]
@@ -0,0 +1,38 @@
- generic [active] [ref=f2e1]:
- button "Open Next.js Dev Tools" [ref=f2e46] [cursor=pointer]
- alert [ref=f2e50]: Digite sua senha
- generic [ref=f2e51]:
- complementary [ref=f2e52]:
- generic [ref=f2e58]:
- generic [ref=f2e59]: Rota Fresca
- generic [ref=f2e60]: Distribuição de alimentos
- generic [ref=f2e61]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f2e62]
- paragraph [ref=f2e63]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f2e64]:
- link "Precisa de ajuda?" [ref=f2e66] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f2e67]:
- generic [ref=f2e68]:
- generic [ref=f2e69]: ana.souza@rotafresca.com.br
- button "Trocar" [ref=f2e74]
- generic [ref=f2e75]:
- heading "Digite sua senha" [level=1] [ref=f2e76]
- paragraph [ref=f2e77]: Conta de consultor. Depois da senha pedimos o código do autenticador.
- generic [ref=f2e78]:
- generic [ref=f2e79]:
- generic [ref=f2e80]:
- generic [ref=f2e81]: Senha
- textbox "Senha" [ref=f2e82]
- generic [ref=f2e83]:
- generic [ref=f2e84]:
- checkbox "Mostrar senha" [ref=f2e85]
- checkbox [aria-hidden]
- text: Mostrar senha
- link "Esqueci minha senha" [ref=f2e86] [cursor=pointer]:
- /url: /entrar/redefinir
- button "Entrar" [ref=f2e87]
- paragraph [ref=f2e88]: Pode colar a senha ou usar o gerenciador de senhas do navegador.
- generic [ref=f2e89]:
- paragraph [ref=f2e90]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f2e91]: Termos de uso · Privacidade
@@ -0,0 +1,40 @@
- generic [ref=f2e1]:
- button "Open Next.js Dev Tools" [ref=f2e46] [cursor=pointer]
- alert [ref=f2e50]: Rota Fresca
- generic [ref=f2e51]:
- complementary [ref=f2e52]:
- generic [ref=f2e58]:
- generic [ref=f2e59]: Rota Fresca
- generic [ref=f2e60]: Distribuição de alimentos
- generic [ref=f2e61]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f2e62]
- paragraph [ref=f2e63]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f2e64]:
- link "Precisa de ajuda?" [ref=f2e66] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f2e67]:
- generic [ref=f2e68]:
- generic [ref=f2e69]: ana.souza@rotafresca.com.br
- button "Trocar" [ref=f2e74]
- generic [ref=f2e75]:
- heading "Digite sua senha" [level=1] [ref=f2e76]
- paragraph [ref=f2e77]: Conta de consultor. Depois da senha pedimos o código do autenticador.
- generic [ref=f2e78]:
- generic [ref=f2e79]:
- generic [ref=f2e80]:
- generic [ref=f2e81]: Senha
- textbox "Senha" [active] [invalid] [ref=f2e82]
- generic [ref=f2e83]:
- generic [ref=f2e84]:
- checkbox "Mostrar senha" [ref=f2e85]
- checkbox [aria-hidden]
- text: Mostrar senha
- link "Esqueci minha senha" [ref=f2e86] [cursor=pointer]:
- /url: /entrar/redefinir
- alert [ref=f2e92]:
- generic [ref=f2e93]: Senha incorreta. Confira e tente de novo.
- button "Entrar" [ref=f2e87]
- paragraph [ref=f2e88]: Pode colar a senha ou usar o gerenciador de senhas do navegador.
- generic [ref=f2e89]:
- paragraph [ref=f2e90]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f2e91]: Termos de uso · Privacidade
@@ -0,0 +1,32 @@
- generic [active] [ref=f3e1]:
- generic [ref=f3e2]:
- complementary [ref=f3e3]:
- generic [ref=f3e9]:
- generic [ref=f3e10]: Rota Fresca
- generic [ref=f3e11]: Distribuição de alimentos
- generic [ref=f3e12]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f3e13]
- paragraph [ref=f3e14]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f3e15]:
- link "Precisa de ajuda?" [ref=f3e17] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f3e18]:
- generic [ref=f3e19]:
- heading "Entrar" [level=1] [ref=f3e20]
- paragraph [ref=f3e21]: Use o e-mail da sua conta. Conforme o tipo de conta, pedimos a senha ou mandamos um link de acesso.
- generic [ref=f3e22]:
- generic [ref=f3e23]:
- generic [ref=f3e24]: E-mail
- textbox "E-mail" [ref=f3e25]:
- /placeholder: nome@empresa.com.br
- button "Continuar" [ref=f3e26]
- generic [ref=f3e27]: ou
- button "Entrar com chave de acesso (passkey)" [ref=f3e31]
- generic [ref=f3e35]:
- paragraph [ref=f3e36]: É motorista?
- paragraph [ref=f3e37]: Entre pelo app Rota Fresca no celular, com o seu número. Não precisa de e-mail.
- generic [ref=f3e38]:
- paragraph [ref=f3e39]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f3e40]: Termos de uso · Privacidade
- button "Open Next.js Dev Tools" [ref=f3e46] [cursor=pointer]
- alert [ref=f3e50]
@@ -0,0 +1,38 @@
- generic [active] [ref=f3e1]:
- button "Open Next.js Dev Tools" [ref=f3e46] [cursor=pointer]
- alert [ref=f3e50]
- generic [ref=f3e51]:
- complementary [ref=f3e52]:
- generic [ref=f3e58]:
- generic [ref=f3e59]: Rota Fresca
- generic [ref=f3e60]: Distribuição de alimentos
- generic [ref=f3e61]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f3e62]
- paragraph [ref=f3e63]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f3e64]:
- link "Precisa de ajuda?" [ref=f3e66] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f3e67]:
- generic [ref=f3e68]:
- generic [ref=f3e69]: ana.souza@rotafresca.com.br
- button "Trocar" [ref=f3e74]
- generic [ref=f3e75]:
- heading "Digite sua senha" [level=1] [ref=f3e76]
- paragraph [ref=f3e77]: Conta de consultor. Depois da senha pedimos o código do autenticador.
- generic [ref=f3e78]:
- generic [ref=f3e79]:
- generic [ref=f3e80]:
- generic [ref=f3e81]: Senha
- textbox "Senha" [ref=f3e82]
- generic [ref=f3e83]:
- generic [ref=f3e84]:
- checkbox "Mostrar senha" [ref=f3e85]
- checkbox [aria-hidden]
- text: Mostrar senha
- link "Esqueci minha senha" [ref=f3e86] [cursor=pointer]:
- /url: /entrar/redefinir
- button "Entrar" [ref=f3e87]
- paragraph [ref=f3e88]: Pode colar a senha ou usar o gerenciador de senhas do navegador.
- generic [ref=f3e89]:
- paragraph [ref=f3e90]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f3e91]: Termos de uso · Privacidade
@@ -0,0 +1,33 @@
- generic [active] [ref=f3e1]:
- button "Open Next.js Dev Tools" [ref=f3e46] [cursor=pointer]
- alert [ref=f3e50]
- generic [ref=f3e92]:
- complementary [ref=f3e93]:
- generic [ref=f3e99]:
- generic [ref=f3e100]: Rota Fresca
- generic [ref=f3e101]: Distribuição de alimentos
- generic [ref=f3e102]:
- heading "Do depósito à prateleira, na hora certa." [level=2] [ref=f3e103]
- paragraph [ref=f3e104]: Pedidos, entregas e notas da sua rede no mesmo lugar.
- main [ref=f3e105]:
- link "Precisa de ajuda?" [ref=f3e107] [cursor=pointer]:
- /url: mailto:suporte@rotafresca.com.br
- generic [ref=f3e108]:
- heading "Confirme que é você" [level=1] [ref=f3e113]
- generic [ref=f3e114]:
- generic [ref=f3e115]:
- generic [ref=f3e116]:
- generic [ref=f3e117]: Código
- textbox "Código" [ref=f3e118]
- generic [ref=f3e119]:
- checkbox "Não pedir de novo neste computador por 30 dias" [checked] [ref=f3e120]
- checkbox [checked] [aria-hidden]
- text: Não pedir de novo neste computador por 30 dias
- button "Confirmar" [ref=f3e121]
- generic [ref=f3e122]:
- link "Usar um código de recuperação" [ref=f3e123] [cursor=pointer]:
- /url: /entrar/codigo?recuperacao=1
- paragraph [ref=f3e124]: Perdeu o celular? Peça ao administrador da conta para refazer o autenticador.
- generic [ref=f3e125]:
- paragraph [ref=f3e126]: Recebeu um convite? Abra o link do e-mail para criar seu acesso.
- paragraph [ref=f3e127]: Termos de uso · Privacidade
@@ -0,0 +1,47 @@
- generic [active] [ref=f3e1]:
- button "Open Next.js Dev Tools" [ref=f3e46] [cursor=pointer]
- alert [ref=f3e50]: Bom dia, Ana
- generic [ref=f3e128]:
- complementary [ref=f3e129]:
- generic [ref=f3e130]:
- generic [ref=f3e136]:
- generic [ref=f3e137]: Rota Fresca
- generic [ref=f3e138]: Distribuição de alimentos
- navigation [ref=f3e139]:
- link "Painel" [ref=f3e140] [cursor=pointer]:
- /url: /painel
- link "Roteiro do dia" [ref=f3e143] [cursor=pointer]:
- /url: /roteiro
- link "Lojas (PDVs)" [ref=f3e146] [cursor=pointer]:
- /url: /lojas
- link "Pedidos" [ref=f3e149] [cursor=pointer]:
- /url: /pedidos
- link "Entregas" [ref=f3e152] [cursor=pointer]:
- /url: /entregas
- link "Validade e lotes" [ref=f3e155] [cursor=pointer]:
- /url: /validade
- link "Relatórios" [ref=f3e158] [cursor=pointer]:
- /url: /relatorios
- link "Integrações e notas" [ref=f3e161] [cursor=pointer]:
- /url: /integracoes
- link "Leitura de documentos" [ref=f3e164] [cursor=pointer]:
- /url: /documentos
- link "Contatos e mensagens" [ref=f3e167] [cursor=pointer]:
- /url: /contatos
- link "Configurações" [ref=f3e170] [cursor=pointer]:
- /url: /configuracoes
- generic [ref=f3e173]:
- generic [aria-hidden] [ref=f3e174]: A
- generic [ref=f3e175]:
- generic [ref=f3e176]: Ana Souza
- generic [ref=f3e177]: Consultora · Zona Oeste
- main [ref=f3e178]:
- generic [ref=f3e179]:
- generic [ref=f3e180]:
- heading "Bom dia, Ana" [level=1] [ref=f3e181]
- paragraph [ref=f3e182]: domingo, 25 de outubro
- generic [ref=f3e183]:
- textbox "Buscar loja, pedido ou produto" [ref=f3e187]
- button "Notificações" [ref=f3e188]
- button "Importar / Exportar" [ref=f3e189]
- button "Novo pedido" [ref=f3e190]
Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Generated
+710 -7
View File
@@ -33,6 +33,17 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
name = "aes"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
dependencies = [
"cfg-if",
"cipher",
"cpufeatures 0.2.17",
]
[[package]]
name = "ahash"
version = "0.8.12"
@@ -192,6 +203,112 @@ dependencies = [
"libloading",
]
[[package]]
name = "async-broadcast"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
dependencies = [
"event-listener",
"event-listener-strategy",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-channel"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
dependencies = [
"concurrent-queue",
"event-listener-strategy",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-io"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
dependencies = [
"autocfg",
"cfg-if",
"concurrent-queue",
"futures-io",
"futures-lite",
"parking",
"polling",
"rustix 1.1.5",
"slab",
"windows-sys 0.61.2",
]
[[package]]
name = "async-lock"
version = "3.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
dependencies = [
"event-listener",
"event-listener-strategy",
"pin-project-lite",
]
[[package]]
name = "async-process"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
dependencies = [
"async-channel",
"async-io",
"async-lock",
"async-signal",
"async-task",
"blocking",
"cfg-if",
"event-listener",
"futures-lite",
"rustix 1.1.5",
]
[[package]]
name = "async-recursion"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f8abc12baad266b1c8cec146854c195b5864b4221d4b2ca7296a7ae82d9e451"
dependencies = [
"proc-macro2",
"quote",
"syn 3.0.7",
]
[[package]]
name = "async-signal"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
dependencies = [
"async-io",
"async-lock",
"atomic-waker",
"cfg-if",
"futures-core",
"futures-io",
"rustix 1.1.5",
"signal-hook-registry",
"slab",
"windows-sys 0.61.2",
]
[[package]]
name = "async-task"
version = "4.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
[[package]]
name = "async-trait"
version = "0.1.92"
@@ -316,6 +433,15 @@ dependencies = [
"generic-array",
]
[[package]]
name = "block-padding"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
dependencies = [
"generic-array",
]
[[package]]
name = "block2"
version = "0.5.1"
@@ -334,6 +460,19 @@ dependencies = [
"objc2 0.6.5",
]
[[package]]
name = "blocking"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa"
dependencies = [
"async-channel",
"async-task",
"futures-io",
"futures-lite",
"piper",
]
[[package]]
name = "bumpalo"
version = "3.20.3"
@@ -360,6 +499,12 @@ dependencies = [
"syn 3.0.7",
]
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "byteorder-lite"
version = "0.1.0"
@@ -422,6 +567,15 @@ dependencies = [
"wayland-client",
]
[[package]]
name = "cbc"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
dependencies = [
"cipher",
]
[[package]]
name = "cc"
version = "1.7.0"
@@ -469,6 +623,16 @@ dependencies = [
"windows-link",
]
[[package]]
name = "cipher"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
dependencies = [
"crypto-common",
"inout",
]
[[package]]
name = "clipboard-win"
version = "5.4.1"
@@ -620,7 +784,7 @@ dependencies = [
[[package]]
name = "craft-ui"
version = "0.1.0"
source = "git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=22544b6d619d4f16779b8bdfa3f0b642a86fc065#22544b6d619d4f16779b8bdfa3f0b642a86fc065"
source = "git+https://git.marcospaulo.dev.br/masi/craft-libs?rev=9c470aa935c4ce48f2ba4f0a17f9410c0c8660fb#9c470aa935c4ce48f2ba4f0a17f9410c0c8660fb"
dependencies = [
"egui",
]
@@ -683,6 +847,35 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376"
[[package]]
name = "dbus"
version = "0.9.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e"
dependencies = [
"libc",
"libdbus-sys",
"windows-sys 0.61.2",
]
[[package]]
name = "dbus-secret-service"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "708b509edf7889e53d7efb0ffadd994cc6c2345ccb62f55cfd6b0682165e4fa6"
dependencies = [
"aes",
"block-padding",
"cbc",
"dbus",
"fastrand",
"hkdf",
"num",
"once_cell",
"sha2",
"zeroize",
]
[[package]]
name = "defmt"
version = "1.1.1"
@@ -722,6 +915,7 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
"subtle",
]
[[package]]
@@ -894,6 +1088,33 @@ dependencies = [
"bytemuck",
]
[[package]]
name = "endi"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
[[package]]
name = "enumflags2"
version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
dependencies = [
"enumflags2_derive",
"serde",
]
[[package]]
name = "enumflags2_derive"
version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.119",
]
[[package]]
name = "env_filter"
version = "2.0.0"
@@ -979,6 +1200,26 @@ dependencies = [
"num-traits",
]
[[package]]
name = "event-listener"
version = "5.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2"
dependencies = [
"parking",
"pin-project-lite",
]
[[package]]
name = "event-listener-strategy"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
dependencies = [
"event-listener",
"pin-project-lite",
]
[[package]]
name = "fastrand"
version = "2.5.0"
@@ -1171,6 +1412,19 @@ version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed"
[[package]]
name = "futures-lite"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
dependencies = [
"fastrand",
"futures-core",
"futures-io",
"parking",
"pin-project-lite",
]
[[package]]
name = "futures-macro"
version = "0.3.34"
@@ -1231,6 +1485,17 @@ dependencies = [
"windows-link",
]
[[package]]
name = "getrandom"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "getrandom"
version = "0.3.4"
@@ -1386,6 +1651,30 @@ version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hkdf"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
dependencies = [
"hmac",
]
[[package]]
name = "hmac"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
"digest",
]
[[package]]
name = "http"
version = "1.5.0"
@@ -1708,6 +1997,16 @@ dependencies = [
"serde_core",
]
[[package]]
name = "inout"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
dependencies = [
"block-padding",
"generic-array",
]
[[package]]
name = "ipnet"
version = "2.12.2"
@@ -1861,6 +2160,22 @@ dependencies = [
"serde",
]
[[package]]
name = "keyring"
version = "3.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c"
dependencies = [
"byteorder",
"dbus-secret-service",
"log",
"secret-service",
"security-framework 2.11.1",
"security-framework 3.7.0",
"windows-sys 0.60.2",
"zeroize",
]
[[package]]
name = "khronos-egl"
version = "6.0.0"
@@ -1896,6 +2211,15 @@ version = "0.2.190"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78"
[[package]]
name = "libdbus-sys"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043"
dependencies = [
"pkg-config",
]
[[package]]
name = "libloading"
version = "0.8.9"
@@ -2042,6 +2366,15 @@ dependencies = [
"libc",
]
[[package]]
name = "memoffset"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
[[package]]
name = "mime"
version = "0.3.17"
@@ -2157,7 +2490,7 @@ dependencies = [
"openssl-probe",
"openssl-sys",
"schannel",
"security-framework",
"security-framework 3.7.0",
"security-framework-sys",
"tempfile",
]
@@ -2192,6 +2525,19 @@ dependencies = [
"jni-sys 0.3.1",
]
[[package]]
name = "nix"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
"bitflags 2.13.2",
"cfg-if",
"cfg_aliases",
"libc",
"memoffset",
]
[[package]]
name = "nix"
version = "0.31.3"
@@ -2210,6 +2556,69 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
[[package]]
name = "num"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
dependencies = [
"num-bigint",
"num-complex",
"num-integer",
"num-iter",
"num-rational",
"num-traits",
]
[[package]]
name = "num-bigint"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
dependencies = [
"num-integer",
"num-traits",
]
[[package]]
name = "num-complex"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [
"num-traits",
]
[[package]]
name = "num-integer"
version = "0.1.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b"
dependencies = [
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b"
dependencies = [
"num-integer",
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
dependencies = [
"num-bigint",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -2698,6 +3107,16 @@ dependencies = [
"num-traits",
]
[[package]]
name = "ordered-stream"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
dependencies = [
"futures-core",
"pin-project-lite",
]
[[package]]
name = "owned_ttf_parser"
version = "0.25.1"
@@ -2709,7 +3128,7 @@ dependencies = [
[[package]]
name = "papercraft"
version = "0.3.0"
version = "0.8.2"
dependencies = [
"arboard",
"axum",
@@ -2727,6 +3146,8 @@ dependencies = [
"i_overlay",
"image",
"js-sys",
"keyring",
"libc",
"log",
"lyon",
"miniz_oxide 0.9.1",
@@ -2740,6 +3161,8 @@ dependencies = [
"resvg",
"rfd",
"rmcp",
"ruzstd",
"semver",
"serde",
"serde_json",
"tokio",
@@ -2752,10 +3175,18 @@ dependencies = [
"web-sys",
"web-time",
"wgpu",
"windows-sys 0.61.2",
"winit",
"winresource",
"zstd",
]
[[package]]
name = "parking"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
name = "parking_lot"
version = "0.12.5"
@@ -2836,6 +3267,17 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
[[package]]
name = "piper"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
dependencies = [
"atomic-waker",
"fastrand",
"futures-io",
]
[[package]]
name = "pkg-config"
version = "0.3.34"
@@ -2955,7 +3397,7 @@ checksum = "1f21b97672d2dc848e7b25701ab4535618b92f4861c13cc3f7f7bed52ad3c8da"
dependencies = [
"futures",
"indexmap",
"nix",
"nix 0.31.3",
"tokio",
"tracing",
"windows",
@@ -3009,13 +3451,24 @@ version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
[[package]]
name = "rand"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c"
dependencies = [
"libc",
"rand_chacha 0.3.1",
"rand_core 0.6.4",
]
[[package]]
name = "rand"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41"
dependencies = [
"rand_chacha",
"rand_chacha 0.9.0",
"rand_core 0.9.5",
]
@@ -3030,6 +3483,16 @@ dependencies = [
"rand_core 0.10.1",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core 0.6.4",
]
[[package]]
name = "rand_chacha"
version = "0.9.0"
@@ -3040,6 +3503,15 @@ dependencies = [
"rand_core 0.9.5",
]
[[package]]
name = "rand_core"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom 0.2.17",
]
[[package]]
name = "rand_core"
version = "0.9.5"
@@ -3384,6 +3856,15 @@ version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
[[package]]
name = "ruzstd"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7c1c839d570d835527c9a5e4db7cb2198683a988cb9d7293fc8674e6bd58fc8"
dependencies = [
"twox-hash",
]
[[package]]
name = "ryu"
version = "1.0.23"
@@ -3459,6 +3940,38 @@ dependencies = [
"tiny-skia 0.11.4",
]
[[package]]
name = "secret-service"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4d35ad99a181be0a60ffcbe85d680d98f87bdc4d7644ade319b87076b9dbfd4"
dependencies = [
"aes",
"cbc",
"futures-util",
"generic-array",
"hkdf",
"num",
"once_cell",
"rand 0.8.8",
"serde",
"sha2",
"zbus",
]
[[package]]
name = "security-framework"
version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.13.2",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"security-framework-sys",
]
[[package]]
name = "security-framework"
version = "3.7.0"
@@ -3559,6 +4072,17 @@ dependencies = [
"serde_core",
]
[[package]]
name = "serde_repr"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
dependencies = [
"proc-macro2",
"quote",
"syn 3.0.7",
]
[[package]]
name = "serde_spanned"
version = "1.1.2"
@@ -3591,6 +4115,17 @@ dependencies = [
"digest",
]
[[package]]
name = "sha2"
version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures 0.2.17",
"digest",
]
[[package]]
name = "shlex"
version = "2.0.1"
@@ -3800,6 +4335,12 @@ dependencies = [
"float-cmp",
]
[[package]]
name = "subtle"
version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "svgtypes"
version = "0.16.1"
@@ -3859,10 +4400,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [
"fastrand",
"getrandom 0.3.4",
"getrandom 0.4.3",
"once_cell",
"rustix 1.1.5",
"windows-sys 0.52.0",
"windows-sys 0.61.2",
]
[[package]]
@@ -4225,6 +4766,12 @@ dependencies = [
"thiserror 2.0.21",
]
[[package]]
name = "twox-hash"
version = "2.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86a801b3cea342a06d468c8710662aa29e5e05e4f5c0d62f00bbb7f2ad7941c2"
[[package]]
name = "type-map"
version = "0.5.1"
@@ -4240,6 +4787,17 @@ version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
[[package]]
name = "uds_windows"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
dependencies = [
"memoffset",
"tempfile",
"windows-sys 0.61.2",
]
[[package]]
name = "unicode-bidi"
version = "0.3.18"
@@ -5252,6 +5810,16 @@ version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"
[[package]]
name = "xdg-home"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
dependencies = [
"libc",
"windows-sys 0.59.0",
]
[[package]]
name = "xkbcommon-dl"
version = "0.4.2"
@@ -5306,6 +5874,62 @@ dependencies = [
"synstructure",
]
[[package]]
name = "zbus"
version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
dependencies = [
"async-broadcast",
"async-process",
"async-recursion",
"async-trait",
"enumflags2",
"event-listener",
"futures-core",
"futures-sink",
"futures-util",
"hex",
"nix 0.29.0",
"ordered-stream",
"rand 0.8.8",
"serde",
"serde_repr",
"sha1",
"static_assertions",
"tracing",
"uds_windows",
"windows-sys 0.52.0",
"xdg-home",
"zbus_macros",
"zbus_names",
"zvariant",
]
[[package]]
name = "zbus_macros"
version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.119",
"zvariant_utils",
]
[[package]]
name = "zbus_names"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
dependencies = [
"serde",
"static_assertions",
"zvariant",
]
[[package]]
name = "zerocopy"
version = "0.8.62"
@@ -5352,6 +5976,20 @@ name = "zeroize"
version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879"
dependencies = [
"zeroize_derive",
]
[[package]]
name = "zeroize_derive"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.119",
]
[[package]]
name = "zerotrie"
@@ -5398,6 +6036,34 @@ version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
[[package]]
name = "zstd"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
dependencies = [
"zstd-safe",
]
[[package]]
name = "zstd-safe"
version = "7.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64d80649ab6db9d9f6f9c80a40becd948eda4714a0a5ac8c4d157a32231c7882"
dependencies = [
"zstd-sys",
]
[[package]]
name = "zstd-sys"
version = "2.1.2+zstd.1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "481ada9c543b2323cbb7bbdbb5249177fbf0188ed959ed2c15e4b22421c84ed3"
dependencies = [
"cc",
"pkg-config",
]
[[package]]
name = "zune-core"
version = "0.5.3"
@@ -5412,3 +6078,40 @@ checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"
dependencies = [
"zune-core",
]
[[package]]
name = "zvariant"
version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
dependencies = [
"endi",
"enumflags2",
"serde",
"static_assertions",
"zvariant_derive",
]
[[package]]
name = "zvariant_derive"
version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.119",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.119",
]
+16 -3
View File
@@ -1,6 +1,6 @@
[package]
name = "papercraft"
version = "0.3.0"
version = "0.8.2"
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"
@@ -43,10 +44,11 @@ env_logger = "0.11"
rfd = "0.17"
fastrand = "2"
dirs = "6"
craft-ui = { version = "0.1.0", git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "22544b6d619d4f16779b8bdfa3f0b642a86fc065" }
craft-ui = { version = "0.1.0", git = "https://git.marcospaulo.dev.br/masi/craft-libs", rev = "9c470aa935c4ce48f2ba4f0a17f9410c0c8660fb" }
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.
@@ -92,8 +93,18 @@ axum = { version = "0.8", default-features = false, features = ["http1", "tokio"
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"
# Pages and versions on disk are zstd-compressed JSON (`project::packed`).
zstd = "0.13"
# Browser build (`src/web.rs`): canvas + WebGPU/WebGL surface, DOM events instead of winit.
# Process RAM and CPU readings for the performance overlay (`ui::perf`).
[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_System_ProcessStatus", "Win32_System_Threading"] }
[target.'cfg(target_arch = "wasm32")'.dependencies]
wgpu = { version = "30", features = ["webgl"] }
wasm-bindgen = "0.2"
@@ -101,4 +112,6 @@ wasm-bindgen-futures = "0.4"
js-sys = "0.3"
console_error_panic_hook = "0.1"
console_log = "1"
# zstd without C, for the browser: reads the packed files native builds write.
ruzstd = "0.8"
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.
+154 -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,158 @@ 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-28: 0.8.2 (refresh-rate cap, accurate RAM/CPU, toolbar)
* Settings > Performance > Refresh rate is now a real frame cap applied live (30 to 360 Hz, 60 by default); **Auto** draws as fast as the display allows and is the default on macOS.
* Performance Monitor: RAM is the private working set and CPU is divided by logical cores on Windows, so both match Task Manager.
* Windows and Linux toolbar: a hamburger button shows or hides the File / Edit strip (remembered); the close button uses the theme's danger colour on the acrylic surface, with hover animation and a pointing-hand cursor.
### 2026-10-28: 0.8.1 (Performance Monitor on Windows, Design tab speed)
* Performance Monitor: RAM (working set) and CPU now show on Windows; before they were `n/a` there. The overlay and slow-frame badge judge frames against a refresh rate you pick in Settings > Performance: 30 to 360 Hz (144, 165 and 240 included), 60 by default.
* Design tab: the lint and the open-feedback scan are kept until the document changes instead of walking every node each frame; a 12.6k-node page no longer drops to a few FPS while the tab is open.
* Windows and Linux: window buttons in the toolbar; controls and acrylic come from craft-ui.
### 2026-10-27: 0.8.0 (screens, packed pages, canvas performance)
* Screens (`specs/screens`): a frame can be declared a screen or an overlay (drawer, modal, sheet) with `set_screens`, inspector toggles, or Declare N screens on the page. Agent edits to layers hidden behind an overlay or opaque layer in their screen are refused unless `allowHidden`; partly covered ones are reported with their visible share. `get_basic_info` lists screens, `get_node_info` tells a layer's visibility, `lint_design` skips hidden layers, On click lists screens, nested screens get canvas labels.
* Pages and saved versions are stored as zstd-compressed compact JSON (`.json.zst`, project format 3): the 68 MB Interview project is 1.3 MB on disk and loads faster. A legacy `.json` still reads and is replaced on the next save; older builds refuse format 3.
* Canvas performance: the editor logs which layers each change touched, so the scene cache re-tessellates only those and keeps no copy of the document (443 → 346 MB on Interview). Zoom holds its geometry until it settles, tiny layers are skipped, vertices are 24 bytes, redraws follow vsync, the idle pointer no longer redraws, freed memory goes back to the system when idle, off-screen frame labels are skipped, and the layers panel keeps its row heights between frames (panning a large page: ~9 → ~0.7 ms a frame).
* Frame labels: none on frames too narrow on screen, overlapping labels are dropped (selected and larger frames first), long names end in an ellipsis.
* Dropdowns size to their longest option (capped), keep the name of `A / B / Name` options, scroll when long and show the full name on hover.
* Settings: a Performance page (FPS, frame time, RAM, CPU, GPU, optional overlay and slow-frame badge), agent logos in the agent rows; the Chat page no longer collapses.
### 2026-10-25: 0.8.0 (properties modal, row merges)
* Properties modal (inspector, on a main: Edit properties…): a tab per property (name, kind, layer, default, delete); an options property as a Table (a row per option, a column per layer · style; colours picked from the project's variables with a swatch, visibility as a toggle, icon, image and text fields; add or remove options and columns) or as Source (each option's changes as JSON with syntax highlighting); templates from the + Property menu; Save replaces them all. The inline list is name, kind and a remove button. The `status` template writes colours the project has as variables as those variables.
* Canvas overlays (agent glow, agent outlines, review outlines, the agent-elsewhere chip) sit below modals instead of showing through them. Two segmented controls in one row no longer share widget ids (the second did not respond).
* `merge_variants` keeps what each moved instance shows (texts that came from its old variant), carries nested instances' property values (a badge's Tone) in the options, and takes `textLayers` for state texts only.
### 2026-10-25: 0.8.0 (prototype links tool, merge icon colours)
* `set_prototype_links`: agents can link a layer to a screen for Present mode (back arrows, rows, tabs); before, only the inspector could.
* `merge_variants` compares an icon's colour (keeping its variable), now that icons are compared as one unit.
### 2026-10-25: 0.8.0 (data safety fixes)
* Sync no longer throws away an instance written over a nested one the way older versions stored it (its own root, no swap): it becomes a swap of the main's child at that place. Projects built before #11 lost such layers (a checked checkbox, a status badge) on the next edit of the outer main.
* Icons: the HTML parser keeps attribute names in lowercase, so the icon and plugin code never removed the SVG's original `viewBox`; since #14 that made `<x-paper-icon>` (and icon swaps) scale twice and come out tiny. Unreleased builds only; 0.7.3 is not affected.
* `merge_variants` refuses merges that would leave one option and changes nothing then.
### 2026-10-25: 0.8.0 (merge variants, pinned bars)
* `merge_variants`: per-state components (`Tab bar / Hoje`, `Status / Sucesso`...) become one component with an enum property. Each variant's differences from the base, matched by layer path (fills, colours, borders, weight, radius, visibility, icons; texts on request), become its option; every instance on every page moves to the base with its value; the base takes the family name; the emptied variants are deleted. A variant with layers the base lacks is left out and reported.
* Absolute children of a scrolling screen stay pinned while its content scrolls (a tab bar, a floating button), and do not add to the scroll range.
### 2026-10-25: 0.8.0 (fix #22)
* #22: a hug column whose width comes from its parent (stretched or filled) re-measures its height once its text wraps at that width, and the parent measures again, instead of keeping a height measured while the text was narrow.
### 2026-10-25: 0.8.0 (component properties)
* Main components carry properties (`Node.props`): `text`, `bool`, `icon` and `enum`, whose options are changes in the overrides format (a layer name, `$root` or a path `Item > Label`, to a text or styles that may hold `text`, `icon` and `visibility`), so they restyle, retext, show, hide or re-icon any layer. Instances keep their values (`prop_values`) as overrides, so main edits keep them; changing the definitions re-applies every instance on every page.
* Templates: `text` (a property per text layer), `active` (which item of a tab bar, nav or segmented row is active) and `status` (options with a colour tint the root and colour the label and icon).
* `set_component_props`, `set_instance_props`, `props='{...}'` on `<x-paper-instance>`, properties in `get_components`, `{Prop}` in code link templates, and an inspector section (a control per property on an instance; Texts and Active item templates on a main). Icon swaps keep the layer's name and link (a `children` override); recoloured icon shapes inside instances now keep their colour after a sync.
* Spec: `specs/component-props/spec.md`.
### 2026-10-25: 0.8.0 (scrolling screens)
* Screens keep their size and scroll what overflows: a frame's `scroll` flag (CSS `overflow: auto|scroll`, `overflow-y-auto` in the Tailwind export) makes it fixed height and clipped, and the wheel over it scrolls its content on the canvas and in Present, then pans once the content ends. The offset is view state, not saved; hit-testing and overlays follow it.
* Toggles: a scroll button beside each screen's name (shown when it scrolls, overflows, or is hovered), Scroll overflow on a selected frame, and Screens scroll on the page for every screen at once. A fit-content screen that grew goes back to its min height.
* Agents are told to keep screens at their size and use overflow:auto for long content.
### 2026-10-25: 0.8.0 (fixes #19, #20, #21)
* #19: a clipping frame draws its border after its children, so filled rows no longer hide it. Clipping stays rectangular: children's square corners still show past a rounded border.
* #20: a border written with a colour variable (`1px solid var(--border)`) binds the stroke, a literal one unbinds it, and reads show `var(--name)` for bound strokes. `find_nodes` says when it stopped at 500 matches.
* #21: hug (fit-content) frames grow around growing children (CSS flex-basis auto) instead of staying at their min height; with short content the min height stays and the growing child fills it, so a pinned footer works.
### 2026-10-25: 0.8.0 (follow agents, skeletons)
* Follow agents (Settings, Chat; on by default): in Design and Chat mode alike, the canvas pans, and switches page, to the layer any agent changes (the chat, Claude Code over MCP, a helper). Moving the canvas yourself pauses it for a moment; off, a chip offers the agent's page.
* Skeletons: the moment the model starts writing a tool call (`ToolDraft` and `ToolInput` events from Claude Code's stream and the API), the canvas shows a shimmering skeleton over its target, or where a new artboard goes, labelled with what it is doing, until the call has run. Fresh agent content comes in through a skeleton that fades, so an outline never frames empty space.
* Top bar: the title and the agent pill leave room measured from the buttons on the right, so nothing overlaps at narrow widths.
### 2026-10-25: 0.8.0 (fixes #14 to #18)
* #14: `write_html` fits an `<svg>` viewBox into its width and height like a browser (centred, aspect kept).
* #15: a note on something placed straight in its artboard treats the artboard as the screen: tidy keeps cards off it instead of in its free space.
* #16: `not-an-instance` no longer matches look-alikes with a different icon; its fix names the `<x-paper-instance>` to write (swap_instance refuses plain frames).
* #17: instances with their own text re-measure it when the main's text style changes, so hug buttons keep fitting their labels (also covers the size reset after a swap).
* #18: `lint_design` reports borders whose hex equals a color variable, and `fix` binds them (`stroke`), so a mode switch reaches them.
### 2026-10-25: 0.7.3 (QA sub-agent, helper agents, auto mode, mid-turn messages, isolated dev settings)
* QA sub-agent: Claude Code chats always get a Sonnet `qa` agent that lints and screenshots built frames and returns only findings, so screenshots stay out of the main context.
* Helper agents (`src/mcp/delegate.rs`, Settings, Chat, Helper): `delegate` hands `qa`, `read` or `build` tasks to a cheaper agent CLI (pi with MiniMax M3.1 Flash, opencode, an Ollama-backed agent, any command taking `{prompt}`). It drives PaperCraft through `papercraft-cli`, runs off the UI thread, and only its last 6,000 characters come back. With a helper set, the chat agent orchestrates: keeps the brief and taste, delegates review, bulk reading and fully specified edits.
* Dev config isolation: `PAPERCRAFT_HOME` also isolates the chat settings (`$PAPERCRAFT_HOME/.config`), so a second copy for testing never touches the installed app's settings.
* Live check in an isolated copy: `delegate` ran the pi helper (MiniMax M3.1 Flash) as QA, a message added mid-turn went Waiting then Seen, and the agent drafted #13.
* Fixes #10, #11, #12, #13:
* #10: `move_nodes` to another page keeps mains' component keys and relinks every instance to moved nodes; new `rename_file` renames a project.
* #11: swapped nested instances persist as swap overrides (`InstanceLink.swap`), preserving component identity across outer component updates and copies.
* #12: `move_nodes` to another page takes the moved nodes' annotations along; detached notes resolve as `Detached #n`.
* #13: `get_computed_styles` reports a text colour bound to a variable as `var(--name)`.
* Auto mode (the composer's Auto chip): when a turn ends on `ask_user` questions, the first (recommended) option of each is sent and the chat goes on, until Stop or a turn hits its budget. The agent is told to put its recommendation first, default what only the user can know, and end each turn with next steps.
* The Present button uses a play icon drawn like the icons beside it. Composer chips wrap instead of running under Stop and Add. Top bar: the agent pill drops its text when it would run under the buttons on the right.
* While a chat turn works, the composer's Add (or Enter) queues a message (`src/mcp/steer.rs`). It rides on the agent's next PaperCraft tool result for that chat, so every backend reads it mid-turn; the composer shows each as Waiting or Seen. What no tool call picked up is sent as the next message when the turn ends, or goes back into the box after Stop.
### 2026-10-24: 0.7.2 (UI kits, code links, issues from the app, design playbook)
* Code links (Figma Code Connect style): a main component carries its library import and a React and an egui template (`set_code_link`). The React, Tailwind, inline JSX and egui exports write linked instances as that code, with overrides filled in and imports gathered once; the AI spec lists them as Library Components with a "use it, do not rebuild it" rule and stops describing their inner layers.
* UI kits (`src/ui_kits.rs`, `apply_ui_kit`): shadcn/ui, Ant Design, React Bits and egui, each with Light and Dark variables, tokens and components in its look and density, all linked. The chat brief asks for the code library and starts from its kit.
* Issues from the app (`src/issues.rs`): the agent's `report_issue` draft card (Send or Discard) and a Report a PaperCraft issue form, filed on the repository in Settings (token in the keychain, else the `tea` login), de-duplicated by title against open and closed issues.
* design-playbook in the chat: with the `playbook` CLI installed, the brief asks whether to follow the playbook and the agent looks rules up with `design_rules`, citing ids in its report.
* Top bar: project name and page picker on one centred row; the two-row title had outgrown the bar and covered the canvas.
* Evidence: `src/ui_kits.rs`, `src/issues.rs`, `src/mcp/codegen.rs` (`linked_components_export_as_library_code`), `specs/ui-kits/spec.md`.
### 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.
+31 -9
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**.
@@ -19,12 +19,12 @@ Agents can already build a design system through the tools; people cannot yet ma
| 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) | partial | Non-color tokens (`--spacing-md`) editable in Design tab and substituted in CSS; typed per-field bindings todo. |
| 8 | Stroke and gradient variables | todo | Strokes and gradients keep fixed colors. |
| 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 | **done** | `swap_instance` and `detach_instance` MCP tools + UI controls in Design tab and Inspector. |
| 12 | Cross-page and shared libraries | todo | Components and instances must live on one page. |
| 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. |
@@ -32,7 +32,7 @@ Agents can already build a design system through the tools; people cannot yet ma
| # | Item | Status | Notes |
|---|---|---|---|
| 15 | MCP and CLI tool surface | **done** | 43 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 | **done** | `get_jsx` supports `format: "inline"`, `"tailwind"` (Tailwind utility classes), and `"html"` (HTML + CSS rules with `:root` variables). |
@@ -40,14 +40,15 @@ Agents can already build a design system through the tools; people cannot yet ma
| 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. |
| 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. |
@@ -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. |
| 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 | todo | Local-first by design. If added, it must stay optional. |
| 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`. |
+18
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
@@ -56,3 +62,15 @@ SOFTWARE.
Inter 4.1 by Rasmus Andersson — SIL Open Font License 1.1 (`assets/fonts/OFL.txt`). Regular,
Medium, SemiBold, Bold, Italic and Bold Italic are bundled unmodified.
Interface fonts, SIL Open Font License 1.1, Latin subsets as served by Google Fonts, unmodified
(Regular, Medium, SemiBold): Geist (Vercel), Figtree (Erik Kennedy), DM Sans (Colophon Foundry,
Jonny Pinhorn), Nunito (Vernon Adams, Jacques Le Bailly), Quicksand (Andrew Paglinawan),
Fredoka (Milena Brandão, Hafontia), and Varela Round (Joe Prince; Regular only).
## Agent logos
`assets/agents/*.svg` are from LobeHub Icons (`@lobehub/icons-static-svg` 1.80.0,
https://github.com/lobehub/lobe-icons), MIT License, Copyright (c) LobeHub. They are used
unmodified to identify each coding agent in the agent picker. The marks are trademarks of
their owners.
+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Cline</title><path d="M17.035 3.991c2.75 0 4.98 2.24 4.98 5.003v1.667l1.45 2.896a1.01 1.01 0 01-.002.909l-1.448 2.864v1.668c0 2.762-2.23 5.002-4.98 5.002H7.074c-2.751 0-4.98-2.24-4.98-5.002V17.33l-1.48-2.855a1.01 1.01 0 01-.003-.927l1.482-2.887V8.994c0-2.763 2.23-5.003 4.98-5.003h9.962zM8.265 9.6a2.274 2.274 0 00-2.274 2.274v4.042a2.274 2.274 0 004.547 0v-4.042A2.274 2.274 0 008.265 9.6zm7.326 0a2.274 2.274 0 00-2.274 2.274v4.042a2.274 2.274 0 104.548 0v-4.042A2.274 2.274 0 0015.59 9.6z"></path><path d="M12.054 5.558a2.779 2.779 0 100-5.558 2.779 2.779 0 000 5.558z"></path></svg>

After

Width:  |  Height:  |  Size: 750 B

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path d="M22.106 5.68L12.5.135a.998.998 0 00-.998 0L1.893 5.68a.84.84 0 00-.419.726v11.186c0 .3.16.577.42.727l9.607 5.547a.999.999 0 00.998 0l9.608-5.547a.84.84 0 00.42-.727V6.407a.84.84 0 00-.42-.726zm-.603 1.176L12.228 22.92c-.063.108-.228.064-.228-.061V12.34a.59.59 0 00-.295-.51l-9.11-5.26c-.107-.062-.063-.228.062-.228h18.55c.264 0 .428.286.296.514z"></path></svg>

After

Width:  |  Height:  |  Size: 547 B

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z"></path></svg>

After

Width:  |  Height:  |  Size: 651 B

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>GithubCopilot</title><path d="M19.245 5.364c1.322 1.36 1.877 3.216 2.11 5.817.622 0 1.2.135 1.592.654l.73.964c.21.278.323.61.323.955v2.62c0 .339-.173.669-.453.868C20.239 19.602 16.157 21.5 12 21.5c-4.6 0-9.205-2.583-11.547-4.258-.28-.2-.452-.53-.453-.868v-2.62c0-.345.113-.679.321-.956l.73-.963c.392-.517.974-.654 1.593-.654l.029-.297c.25-2.446.81-4.213 2.082-5.52 2.461-2.54 5.71-2.851 7.146-2.864h.198c1.436.013 4.685.323 7.146 2.864zm-7.244 4.328c-.284 0-.613.016-.962.05-.123.447-.305.85-.57 1.108-1.05 1.023-2.316 1.18-2.994 1.18-.638 0-1.306-.13-1.851-.464-.516.165-1.012.403-1.044.996a65.882 65.882 0 00-.063 2.884l-.002.48c-.002.563-.005 1.126-.013 1.69.002.326.204.63.51.765 2.482 1.102 4.83 1.657 6.99 1.657 2.156 0 4.504-.555 6.985-1.657a.854.854 0 00.51-.766c.03-1.682.006-3.372-.076-5.053-.031-.596-.528-.83-1.046-.996-.546.333-1.212.464-1.85.464-.677 0-1.942-.157-2.993-1.18-.266-.258-.447-.661-.57-1.108-.32-.032-.64-.049-.96-.05zm-2.525 4.013c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zm5 0c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zM7.635 5.087c-1.05.102-1.935.438-2.385.906-.975 1.037-.765 3.668-.21 4.224.405.394 1.17.657 1.995.657h.09c.649-.013 1.785-.176 2.73-1.11.435-.41.705-1.433.675-2.47-.03-.834-.27-1.52-.63-1.813-.39-.336-1.275-.482-2.265-.394zm6.465.394c-.36.292-.6.98-.63 1.813-.03 1.037.24 2.06.675 2.47.968.957 2.136 1.104 2.776 1.11h.044c.825 0 1.59-.263 1.995-.657.555-.556.765-3.187-.21-4.224-.45-.468-1.335-.804-2.385-.906-.99-.088-1.875.058-2.265.394zM12 7.615c-.24 0-.525.015-.84.044.03.16.045.336.06.526l-.001.159a2.94 2.94 0 01-.014.25c.225-.022.425-.027.612-.028h.366c.187 0 .387.006.612.028-.015-.146-.015-.277-.015-.409.015-.19.03-.365.06-.526a9.29 9.29 0 00-.84-.044z"></path></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Goose</title><path d="M21.595 23.61c1.167-.254 2.405-.944 2.405-.944l-2.167-1.784a12.124 12.124 0 01-2.695-3.131 12.127 12.127 0 00-3.97-4.049l-.794-.462a1.115 1.115 0 01-.488-.815.844.844 0 01.154-.575c.413-.582 2.548-3.115 2.94-3.44.503-.416 1.065-.762 1.586-1.159.074-.056.148-.112.221-.17.003-.002.007-.004.009-.007.167-.131.325-.272.45-.438.453-.524.563-.988.59-1.193-.061-.197-.244-.639-.753-1.148.319.02.705.272 1.056.569.235-.376.481-.773.727-1.171.165-.266-.08-.465-.086-.471h-.001V3.22c-.007-.007-.206-.25-.471-.086-.567.35-1.134.702-1.639 1.021 0 0-.597-.012-1.305.599a2.464 2.464 0 00-.438.45l-.007.009c-.058.072-.114.147-.17.221-.397.521-.743 1.083-1.16 1.587-.323.391-2.857 2.526-3.44 2.94a.842.842 0 01-.574.153 1.115 1.115 0 01-.815-.488l-.462-.794a12.123 12.123 0 00-4.049-3.97 12.133 12.133 0 01-3.13-2.695L1.332 0S.643 1.238.39 2.405c.352.428 1.27 1.49 2.34 2.302C1.58 4.167.73 3.75.06 3.4c-.103.765-.063 1.92.043 2.816.726.317 1.961.806 3.219 1.066-1.006.236-2.11.278-2.961.262.15.554.358 1.119.64 1.688.119.263.25.52.39.77.452.125 2.222.383 3.164.171l-2.51.897a27.776 27.776 0 002.544 2.726c2.031-1.092 2.494-1.241 4.018-2.238-2.467 2.008-3.108 2.828-3.8 3.67l-.483.678c-.25.351-.469.725-.65 1.117-.61 1.31-1.47 4.1-1.47 4.1-.154.486.202.842.674.674 0 0 2.79-.861 4.1-1.47.392-.182.766-.4 1.118-.65l.677-.483c.227-.187.453-.37.701-.586 0 0 1.705 2.02 3.458 3.349l.896-2.511c-.211.942.046 2.712.17 3.163.252.142.509.272.772.392.569.28 1.134.49 1.688.64-.016-.853.026-1.956.261-2.962.26 1.258.75 2.493 1.067 3.219.895.106 2.051.146 2.816.043a73.87 73.87 0 01-1.308-2.67c.811 1.07 1.874 1.988 2.302 2.34h-.001z"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Kimi</title><path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z"></path><path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z"></path></svg>

After

Width:  |  Height:  |  Size: 786 B

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Mistral</title><path clip-rule="evenodd" d="M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z"></path></svg>

After

Width:  |  Height:  |  Size: 418 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Qwen</title><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Tencent</title><path d="M9.976 1L24 9.8l-10.587.015L10.723 23H5.489L8.18 9.8H3.244L1 5.4h8.077L9.976 1z"></path></svg>

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+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}]}

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