Something went wrong. Try again.
inkfinite (an infinite canvas/whiteboard) monorepo ink.stormlightlabs.org
svelte rust tauri svg canvas perfect-freehand
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279@import '@fontsource-variable/google-sans/wght.css';
.docs-site { --docs-canvas: #171928; --docs-surface: #252738; --docs-surface-raised: #353746; --docs-surface-hover: #474852; --docs-header-surface: rgb(23 25 40 / 94%); --docs-text: #d8e6e6; --docs-text-muted: #a7b4bc; --docs-heading: #c2b5f0; --docs-border: #646675; --docs-border-strong: #b8c5c8; --docs-accent: #2dcc82; --docs-accent-hover: #45dda0; --docs-accent-text: #8de2bc; --docs-on-accent: #101b18; --docs-code-surface: #10131f; --docs-footer-surface: #10131f; --docs-code-line: #646675; --docs-code-text: #d8e6e6; --docs-callout-surface: color-mix(in srgb, var(--docs-accent) 11%, var(--docs-canvas)); --docs-danger: #cc5860; --docs-warning: #d4a666; --docs-shadow-color: #080910; --docs-space-2: 0.5rem; --docs-space-3: 0.75rem; --docs-space-4: 1rem; --docs-space-5: 1.5rem; --docs-space-6: 2rem; --docs-radius-wobbly: 4px 8px 5px 7px / 7px 5px 8px 4px; --docs-radius-wobbly-small: 3px 6px 4px 5px / 5px 4px 6px 3px; --docs-radius-panel: 9px 15px 11px 13px / 13px 9px 15px 11px; --docs-duration-fast: 120ms; --docs-ease-out: cubic-bezier(0.22, 1, 0.36, 1); --docs-font-body: var(--ink-font-body); --docs-font-heading: 'Google Sans Variable', 'Google Sans', sans-serif; --docs-font-display: var(--ink-font-display); --docs-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; --docs-type-xs: 0.72rem; --docs-type-sm: 0.86rem; --docs-shadow: 0 24px 70px rgb(8 9 16 / 32%); font-family: var(--docs-font-body); font-size: 1rem; line-height: 1.65; font-synthesis: none; text-rendering: optimizeLegibility;}
html[data-inkfinite-docs-theme='light'] .docs-site { --docs-canvas: #f0f3f4; --docs-surface: #e2e6e8; --docs-surface-raised: #ffffff; --docs-surface-hover: #d5d9db; --docs-header-surface: rgb(240 243 244 / 94%); --docs-text: #1e2029; --docs-text-muted: #495063; --docs-heading: #4d348f; --docs-border: #858a98; --docs-border-strong: #1e2029; --docs-accent: #168454; --docs-accent-hover: #0f7046; --docs-accent-text: #126a45; --docs-on-accent: #ffffff; --docs-code-surface: #f6f8fa; --docs-footer-surface: #e2e6e8; --docs-code-line: #8c959f; --docs-code-text: #24292e; --docs-callout-surface: #e5f5ed; --docs-danger: #fb5b66; --docs-warning: #ffaf4d; --docs-shadow-color: #1e2029; --docs-shadow: 0 18px 45px rgb(30 32 41 / 18%);}
.docs-site * { box-sizing: border-box;}
.docs-site :where(a) { color: var(--docs-accent-text); text-decoration-thickness: 0.08em; text-underline-offset: 0.16em;}
.docs-site :where(a:hover) { color: var(--docs-accent-hover);}
.docs-site :where(button, input) { font-family: inherit;}
.docs-site :where(:focus-visible) { outline: 3px solid var(--docs-accent); outline-offset: 3px;}
.docs-site ::selection { background: var(--docs-accent); color: var(--docs-on-accent);}
.docs-site .doc-content h2,.docs-site .doc-content h3 { color: var(--docs-heading); font-family: var(--docs-font-heading); font-weight: 650; letter-spacing: -0.025em;}
.docs-site .doc-content h2 { margin: 3rem 0 0.8rem; font-size: clamp(1.55rem, 2.5vw, 2.1rem); line-height: 1.15;}
.docs-site .doc-content h3 { margin: 2rem 0 0.65rem; font-size: 1.35rem; line-height: 1.2;}
.docs-site .doc-content p,.docs-site .doc-content ul,.docs-site .doc-content ol,.docs-site .doc-content table,.docs-site .doc-content blockquote { max-width: 46rem;}
.docs-site .doc-content p { margin: 0 0 1.1rem;}
.docs-site .doc-content ul,.docs-site .doc-content ol { margin: 0 0 1.25rem; padding-left: 1.35rem;}
.docs-site .doc-content li + li { margin-top: 0.4rem;}
.docs-site .doc-content li::marker { color: var(--docs-accent);}
.docs-site .doc-content strong { font-weight: 650;}
.docs-site .doc-content code { font-family: var(--docs-font-mono);}
.docs-site .doc-content :not(pre) > code { padding: 0.14rem 0.28rem; border: 1px solid var(--docs-border); border-radius: 0.2rem; background: var(--docs-surface); color: var(--docs-text); font-size: 0.86em;}
.docs-site .doc-content pre { position: relative; max-width: 52rem; margin: 1.5rem 0; padding: 1.15rem 5rem 1.15rem 1.25rem; overflow-x: auto; border: 1px solid var(--docs-code-line); border-radius: 0.35rem; background: var(--docs-code-surface); color: var(--docs-code-text); box-shadow: 0.35rem 0.35rem 0 var(--docs-accent);}
.docs-site .doc-content pre code { padding: 0; border: 0; background: none; color: inherit; font-size: 0.84rem; line-height: 1.65; tab-size: 2; white-space: pre;}
.docs-site .doc-content .shiki code span { color: var(--shiki-dark);}
html[data-inkfinite-docs-theme='light'] .docs-site .doc-content .shiki code span { color: var(--shiki-light);}
.docs-site .doc-content .copy-code { position: absolute; top: 0.55rem; right: 0.55rem; display: inline-flex; align-items: center; min-height: 2.75rem; padding: 0.35rem 0.6rem; border: 1px solid var(--docs-code-line); border-radius: 0.25rem; background: var(--docs-code-surface); color: var(--docs-code-text); font: 650 0.72rem / 1 var(--docs-font-body); cursor: pointer;}
.docs-site .doc-content .copy-code:hover { border-color: var(--docs-accent);}
.docs-site .doc-content blockquote { margin: 1.5rem 0; padding: 0.8rem 1.1rem; border-left: 4px solid var(--docs-accent); background: var(--docs-callout-surface);}
.docs-site .doc-content blockquote p:last-child { margin-bottom: 0;}
.docs-site .doc-content table { width: 100%; margin: 1.5rem 0; border-collapse: collapse; font-size: 0.93rem;}
.docs-site .doc-content th,.docs-site .doc-content td { padding: 0.65rem 0.7rem; border-bottom: 1px solid var(--docs-border); text-align: left; vertical-align: top;}
.docs-site .doc-content th { color: var(--docs-accent-text); font-size: 0.78rem; font-weight: 650; letter-spacing: 0.02em; text-transform: uppercase;}
.docs-site .doc-content hr { margin: 2.5rem 0; border: 0; border-top: 1px solid var(--docs-border);}
@media (max-width: 520px) { .docs-site .doc-heading h1 { font-size: 2.8rem; }
.docs-site .doc-content pre { margin-right: -0.25rem; margin-left: -0.25rem; box-shadow: 0.2rem 0.2rem 0 var(--docs-accent); }}
@media (prefers-reduced-motion: reduce) { .docs-site *, .docs-site *::before, .docs-site *::after { scroll-behavior: auto !important; transition-duration: 0.01ms !important; }}