twombly 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ :root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--canvas:oklch(97% 0 0);--surface:oklch(100% 0 0);--surface-2:oklch(95.5% 0 0);--surface-hover:oklch(0% 0 0/.05);--surface-pressed:oklch(0% 0 0/.09);--solid:oklch(0% 0 0);--on-solid:oklch(100% 0 0);--island:oklch(0% 0 0);--island-line:transparent;--island-hover:oklch(100% 0 0/.11);--text:oklch(0% 0 0);--secondary:oklch(42% 0 0);--muted:oklch(53% 0 0);--line:oklch(0% 0 0/.09);--line-subtle:oklch(0% 0 0/.06);--icon-muted:.58;--icon-secondary:.72;--frame-bg:oklch(100% 0 0);--accent:oklch(57% .21 256);--selection:oklch(57% .21 256/.12);--guide:oklch(57% .21 256/.6);--signal:oklch(65% .23 41);--signal-soft:oklch(65% .23 41/.13);--signal-soft-hover:oklch(65% .23 41/.2);--danger:oklch(56% .21 27);--danger-soft:oklch(96% .025 25);--live:oklch(50% .14 150);--live-soft:oklch(96% .03 150);--backdrop:oklch(0% 0 0/.24);--shadow:0 0 0 .5px var(--line), 0 4px 8px -2px oklch(0% 0 0/.1), 0 14px 32px -8px oklch(0% 0 0/.3);--shadow-sm:0 0 0 1px var(--line);--radius-shell:10px;--radius-menu:12px;--radius-control:calc(var(--radius-shell) - 3px);--radius-menu-control:calc(var(--radius-menu) - 4px);--font:-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--canvas:oklch(0% 0 0);--surface:oklch(16% 0 0);--surface-2:oklch(22% 0 0);--surface-hover:oklch(100% 0 0/.07);--surface-pressed:oklch(100% 0 0/.11);--solid:oklch(100% 0 0);--on-solid:oklch(0% 0 0);--island-line:oklch(100% 0 0/.13);--text:oklch(98.5% 0 0);--secondary:oklch(80% 0 0);--muted:oklch(66% 0 0);--line:oklch(100% 0 0/.09);--line-subtle:oklch(100% 0 0/.06);--icon-muted:.6;--icon-secondary:.74;--accent:oklch(72% .17 252);--selection:oklch(72% .17 252/.18);--guide:oklch(72% .17 252/.65);--signal:oklch(73% .2 45);--signal-soft:oklch(73% .2 45/.2);--signal-soft-hover:oklch(73% .2 45/.28);--danger:oklch(72% .18 25);--danger-soft:oklch(28% .06 25);--live:oklch(80% .15 150);--live-soft:oklch(28% .05 150);--backdrop:oklch(0% 0 0/.6);--shadow:0 0 0 .5px var(--line), 0 4px 8px -2px oklch(0% 0 0/.3), 0 14px 32px -8px oklch(0% 0 0/.5)}}@supports (corner-shape:squircle){:root{--radius-shell:15px;--radius-menu:18px}:where(.chrome,.chrome *){corner-shape:squircle}.face,.face-button,.huddle-face{corner-shape:round}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--canvas);color:var(--text);font:400 13px/18px var(--font);-webkit-font-smoothing:antialiased;overflow:hidden}button,input,textarea{font:inherit;color:inherit}button{cursor:default;background:0 0;border:0;padding:0}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}a{color:inherit}.muted{color:var(--muted)}.spacer{flex:1}.full-message{height:100%;color:var(--muted);place-items:center;display:grid}.stage{background:var(--canvas);touch-action:none;-webkit-user-select:none;user-select:none;position:fixed;inset:0;overflow:hidden}.working-dots{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.world{transform-origin:0 0;--inv:1;--zoom:1;width:0;height:0;position:absolute;top:0;left:0}.empty-canvas{color:var(--muted);pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.frame{position:absolute;top:0;left:0}.frame-surface{background:var(--frame-bg);box-shadow:0 0 0 calc(1px * var(--inv)) var(--line);position:absolute;inset:0;overflow:hidden}.frame iframe{background:#fff;border:0;width:100%;height:100%;display:block;position:absolute;inset:0}.frame-poster{object-fit:cover;object-position:top left;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:100%;height:100%;position:absolute;inset:0}.frame-shield{cursor:var(--stage-cursor,default);position:absolute;inset:0}.stage[data-role=guest][data-tool=move] .frame-shield{cursor:pointer}.frame.selected .frame-surface,.frame.interacting .frame-surface{box-shadow:0 0 0 calc(1.5px * var(--inv)) var(--accent)}.frame-title{width:calc(100% * var(--zoom));height:26px;transform:scale(var(--inv));transform-origin:0 100%;color:var(--muted);white-space:nowrap;align-items:flex-end;padding-bottom:6px;font-size:12px;line-height:16px;display:flex;position:absolute;bottom:100%;left:0}.frame-title span{text-overflow:ellipsis;overflow:hidden}.frame.selected .frame-title,.frame.interacting .frame-title{color:var(--accent)}.frame-title input{background:var(--surface-2);width:100%;max-width:280px;height:20px;color:var(--text);-webkit-user-select:text;user-select:text;border:0;border-radius:4px;outline:0;margin-left:-4px;padding:0 4px;font-size:12px}.frame-handle{border:1px solid var(--accent);width:8px;height:8px;transform:scale(var(--inv));touch-action:none;background:#fff;border-radius:2px;position:absolute}.frame-handle.nw{cursor:nwse-resize;top:-4px;left:-4px}.frame-handle.ne{cursor:nesw-resize;top:-4px;right:-4px}.frame-handle.sw{cursor:nesw-resize;bottom:-4px;left:-4px}.frame-handle.se{cursor:nwse-resize;bottom:-4px;right:-4px}.guide{background:var(--guide);pointer-events:none;z-index:1000000;position:absolute}.marquee{background:var(--selection);box-shadow:0 0 0 calc(1px * var(--inv)) var(--accent);pointer-events:none;z-index:1000000;position:absolute}.cursors{pointer-events:none;z-index:40;position:absolute;inset:0;overflow:hidden}.cursor{will-change:transform;transition:opacity .18s ease-out;position:absolute;top:-4px;left:-3px}.cursor svg{filter:drop-shadow(0 1px 2px #00000040);display:block}.cursor-label{color:#fff;white-space:nowrap;text-overflow:ellipsis;border-radius:6px;max-width:180px;padding:3px 7px;font-size:12px;font-weight:500;line-height:16px;position:absolute;top:18px;left:16px;overflow:hidden;box-shadow:0 1px 3px #0003}.follow-ring{pointer-events:none;z-index:60;position:fixed;inset:0}.follow-tab{color:#fff;white-space:nowrap;z-index:61;border-radius:14px;align-items:center;gap:6px;height:28px;padding:0 10px;font-size:12px;font-weight:500;display:flex;position:fixed;top:50px;left:50%;transform:translate(-50%)}.face{color:#fff;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:500;line-height:1;display:inline-flex;position:relative;overflow:hidden}.face img{object-fit:cover;width:100%;height:100%;display:block}.face.more{background:var(--surface-2);width:24px;height:24px;color:var(--text);font-size:10px}.faces{flex-direction:row-reverse;align-items:center;padding:0 6px 0 10px;display:flex}.face-button{box-shadow:0 0 0 2px var(--surface);border-radius:50%;margin-left:-6px;transition:transform .1s ease-out;position:relative}.face-button:hover{z-index:2;transform:translateY(-1px)}.face-button.following{box-shadow:0 0 0 2px var(--surface), 0 0 0 3.5px var(--peer);z-index:2}.face-button .face{display:flex}.chrome{z-index:50;-webkit-user-select:none;user-select:none;cursor:default}.shell{border-radius:var(--radius-shell);background:var(--surface);height:38px;box-shadow:var(--shadow-sm);align-items:center;gap:2px;padding:3px;display:flex;position:fixed}.shell-divider{background:var(--line);flex:none;width:1px;height:20px;margin:0 4px}.top-left,.top-right,.toolbar{top:calc(6px + env(safe-area-inset-top))}.top-left{max-width:calc(50vw - 48px);padding-left:11px;left:6px}.top-right{right:6px}.wordmark{color:var(--text);flex:none;padding-right:2px;font-weight:500;text-decoration:none}.canvas-name{border-radius:var(--radius-control);text-overflow:ellipsis;white-space:nowrap;min-width:0;height:32px;color:var(--muted);text-align:left;padding:0 8px;line-height:32px;transition:background-color .1s,color .1s;display:block;overflow:hidden}button.canvas-name:hover{background:var(--surface-hover);color:var(--text)}.canvas-name-input{border-radius:var(--radius-control);background:var(--surface-2);-webkit-user-select:text;user-select:text;border:0;outline:0;width:200px;min-width:0;height:32px;padding:0 8px}.primary-button{border-radius:var(--radius-control);background:var(--solid);height:32px;color:var(--on-solid);flex:none;justify-content:center;align-items:center;padding:0 12px;font-weight:500;transition:opacity .1s;display:inline-flex}.primary-button:hover{opacity:.85}.primary-button:disabled{opacity:.4}.sign-in{border-radius:var(--radius-control);height:32px;color:var(--secondary);align-items:center;padding:0 10px;font-weight:500;text-decoration:none;transition:background-color .1s;display:inline-flex}.sign-in:hover{background:var(--surface-hover)}.icon-button{width:28px;height:28px;color:var(--text);border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background-color .1s;display:inline-flex}.icon-button svg,.tool svg{opacity:var(--icon-muted);transition:opacity .1s}.icon-button:hover{background:var(--surface-hover)}.icon-button:hover svg,.tool:hover svg{opacity:var(--icon-secondary)}.icon-button:active:not(:disabled),.tool:active{background:var(--surface-pressed)}.icon-button:disabled{opacity:.4}.icon-button.small{border-radius:5px;width:24px;height:24px}.icon-button.on,.icon-button.danger-text{background:0 0}.icon-button.on{color:var(--signal)}.icon-button.danger-text{color:var(--danger)}.icon-button.on svg,.icon-button.danger-text svg{opacity:1}.shell .icon-button{border-radius:var(--radius-control);width:32px;height:32px}.link-button{font-size:12px;font-weight:500;text-decoration:none}.link-button:hover{text-decoration:underline}.link-button.quiet{color:var(--muted)}.link-button.danger{color:var(--danger)}.toolbar{left:50%;transform:translate(-50%)}.tool{border-radius:var(--radius-control);width:32px;height:32px;color:var(--text);justify-content:center;align-items:center;transition:background-color .1s,color .1s;display:flex}.tool:hover{background:var(--surface-hover)}.tool.on,.shell .icon-button.on{background:var(--signal-soft);color:var(--signal)}.tool.on:hover,.shell .icon-button.on:hover{background:var(--signal-soft-hover)}.tool.on svg,.tool.on:hover svg{opacity:1}.zoom{right:6px;bottom:calc(6px + env(safe-area-inset-bottom))}.zoom-value{border-radius:var(--radius-control);min-width:44px;height:32px;color:var(--secondary);text-align:center;font-variant-numeric:tabular-nums;font-size:12px;transition:background-color .1s}.zoom-value:hover{background:var(--surface-hover)}.notice{border-radius:var(--radius-menu-control);background:var(--island);color:#fff;height:32px;box-shadow:inset 0 0 0 1px var(--island-line);white-space:nowrap;align-items:center;gap:6px;padding:0 12px;display:flex;position:fixed;bottom:12px;left:50%;transform:translate(-50%)}.reconnecting{background:var(--surface);height:28px;box-shadow:var(--shadow-sm);color:var(--muted);border-radius:14px;padding:5px 10px;font-size:12px;position:fixed;top:50px;left:50%;transform:translate(-50%)}.share-popover{border-radius:var(--radius-menu);background:var(--surface);width:320px;max-width:calc(100vw - 12px);box-shadow:var(--shadow);flex-direction:column;align-items:flex-start;gap:10px;padding:12px;display:flex;position:absolute;top:calc(100% + 6px);right:0}.share-close{position:absolute;top:6px;right:6px}.share-link{gap:6px;width:100%;padding-right:26px;display:flex}.share-link input{border-radius:var(--radius-menu-control);background:var(--surface-2);outline-offset:0;-webkit-user-select:text;user-select:text;border:0;flex:1;min-width:0;height:32px;padding:0 10px;font-size:12px}.share-link .primary-button{border-radius:var(--radius-menu-control)}.share-progress{background:var(--surface-2);border-radius:2px;width:calc(100% - 26px);height:4px;margin:8px 0;overflow:hidden}.share-progress span{background:var(--solid);border-radius:2px;height:100%;transition:width .2s ease-out;display:block}.share-error{color:var(--danger);margin:0;padding-right:26px}.share-wait{margin:0;padding-right:26px}.modal-backdrop{background:var(--backdrop);z-index:70;place-items:center;display:grid;position:fixed;inset:0}.name-prompt{border-radius:var(--radius-menu);background:var(--surface);width:320px;max-width:calc(100vw - 32px);box-shadow:var(--shadow);gap:6px;padding:8px;display:flex}.name-prompt input{border-radius:var(--radius-menu-control);background:var(--surface-2);-webkit-user-select:text;user-select:text;border:0;flex:1;min-width:0;height:32px;padding:0 10px}.name-prompt .primary-button{border-radius:var(--radius-menu-control)}.huddle-faces{align-items:center;display:inline-flex}.huddle-bar{align-items:center;gap:2px;padding-left:7px;display:inline-flex}.huddle-bar .huddle-faces{padding-right:5px}.huddle-face{--level:0;box-shadow:0 0 0 2px var(--surface), 0 0 0 calc(2px + var(--level) * 2px) var(--live);border-radius:50%;margin-left:-5px;transition:box-shadow .1s ease-out;display:inline-flex;position:relative}.huddle-faces .huddle-face:first-child{margin-left:0}.huddle-face.muted{box-shadow:0 0 0 2px var(--surface)}.huddle-face.muted:after{content:"";width:12px;height:12px;box-shadow:0 0 0 1.5px var(--surface);background:var(--danger) no-repeat center / 8px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M3 3l18 18'/%3E%3Cpath d='M8 8v3.5a4 4 0 0 0 6.5 3.1M16 11.5V6.5a4 4 0 0 0-7.6-1.7'/%3E%3C/svg%3E");border-radius:50%;position:absolute;bottom:-3px;right:-3px}.huddle-bar.joining .huddle-face{opacity:.55}.shell .huddle-leave,.shell .huddle-leave:hover{background:var(--danger-soft);color:var(--danger)}.huddle-leave svg,.huddle-leave:hover svg{opacity:1}.huddle-button.live{border-radius:var(--radius-control);height:32px;color:var(--live);align-items:center;gap:6px;padding:0 6px 0 8px;transition:background-color .1s;display:inline-flex}.huddle-button.live:hover{background:var(--surface-hover)}.huddle-button.live .huddle-faces .face{box-shadow:0 0 0 2px var(--surface);margin-left:-5px}.huddle-button.live .huddle-faces .face:first-child{margin-left:0}.huddle-notice{white-space:nowrap;align-items:center;gap:8px;height:32px;padding:0 0 0 6px;display:inline-flex}.huddle-notice b{font-weight:500}.huddle-notice .join{border-radius:var(--radius-control);background:var(--live-soft);height:32px;color:var(--live);align-items:center;padding:0 10px;font-weight:500;display:inline-flex}.huddle-error{height:32px;color:var(--muted);white-space:nowrap;align-items:center;padding:0 8px;display:inline-flex}.comments-layer{pointer-events:none;z-index:30;position:absolute;inset:0;overflow:hidden}.comments-layer>*{pointer-events:auto}.comment-pin{background:var(--surface);width:32px;max-width:32px;height:32px;max-height:32px;box-shadow:var(--shadow);text-align:left;touch-action:none;border-radius:16px 16px 16px 0;align-items:flex-start;gap:8px;padding:4px;transition:max-width .1s ease-in-out,max-height .1s ease-in-out,padding .1s ease-in-out;display:flex;position:absolute;overflow:hidden;transform:translateY(-100%)}.comment-pin.new{background:var(--accent)}.comment-pin.active,.comment-pin.unread{box-shadow:0 0 0 2px var(--accent), var(--shadow)}.comment-pin.resolved .face{opacity:.45}.comment-pin-preview{opacity:0;flex-direction:column;gap:0;min-width:0;font-size:11px;line-height:16px;transition:opacity .1s ease-in-out;display:flex}.comment-pin-preview b{font-weight:500}.comment-pin-head{white-space:nowrap}.comment-pin-text{-webkit-line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.comment-pin.expanded{z-index:5;width:240px;max-width:240px;height:auto;max-height:112px;padding:12px}.comment-pin.expanded .face{width:26px!important;height:26px!important}.comment-pin.expanded .comment-pin-preview{opacity:1;flex:1}.composer{background:var(--surface);box-shadow:0 0 0 1px var(--accent), var(--shadow);-webkit-user-select:text;user-select:text;cursor:auto;border-radius:13px;flex-direction:column;display:flex;position:absolute}.composer-input{align-items:flex-start;gap:8px;padding:8px 16px;display:flex}.composer-input textarea{flex:1;min-width:0}.composer textarea,.thread-reply textarea{resize:none;-webkit-user-select:text;user-select:text;background:0 0;border:0;outline:0;width:100%;padding:0;font-size:13px;line-height:24px;display:block;overflow-y:auto}.composer textarea::placeholder,.thread-reply textarea::placeholder{color:var(--muted)}.composer-actions{border-top:1px solid var(--line);align-items:center;height:40px;padding:4px 8px;display:none}.composer.has-text .composer-actions{display:flex}.composer:not(.has-text) .composer-input{padding-right:8px}.send-button{background:var(--solid);width:24px;height:24px;color:var(--on-solid);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.send-button:disabled{background:var(--surface-2);color:var(--muted)}.emoji-wrap{display:inline-flex;position:relative}.emoji-menu{border-radius:var(--radius-menu);background:var(--surface);box-shadow:var(--shadow);z-index:5;grid-template-columns:repeat(6,28px);gap:2px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);left:0}.emoji-menu button{border-radius:6px;width:28px;height:28px;font-size:16px}.emoji-menu button:hover{background:var(--surface-hover)}.comment-card{background:var(--surface);max-height:min(520px,100vh - 72px);box-shadow:var(--shadow);cursor:auto;border-radius:13px;flex-direction:column;font-size:11px;line-height:16px;display:flex;position:absolute}.thread-header{border-bottom:1px solid var(--line);flex:none;align-items:center;height:42px;padding:4px 8px 4px 16px;display:flex}.thread-title{flex:1;font-weight:550}.thread-actions{align-items:center;gap:4px;display:flex}.menu-wrap{display:inline-flex;position:relative}.menu{border-radius:var(--radius-menu);background:var(--island);min-width:140px;box-shadow:inset 0 0 0 1px var(--island-line), var(--shadow);z-index:6;padding:4px;position:absolute;top:calc(100% + 4px);right:0}.menu button{border-radius:var(--radius-menu-control);color:#fff;text-align:left;white-space:nowrap;width:100%;height:28px;padding:0 8px;font-size:12px;display:block}.menu button:hover{background:var(--island-hover)}.thread-list{-webkit-user-select:text;user-select:text;flex:1;min-height:0;padding:8px 0 0;overflow-y:auto}.thread-comment{padding:4px 16px 8px;position:relative}.thread-comment-head{align-items:center;gap:8px;height:32px;display:flex}.thread-comment-name{font-size:13px;font-weight:500;line-height:24px}.thread-comment-time{font-size:13px;line-height:24px}.thread-comment-more{opacity:0;margin-left:auto;position:relative}.thread-comment:hover .thread-comment-more,.thread-comment-more:focus-within{opacity:1}.thread-comment-text{white-space:pre-wrap;word-break:break-word;padding-left:32px;font-size:13px;line-height:24px}.thread-reply{flex:none;align-items:flex-start;gap:8px;padding:8px 16px 16px;display:flex}.thread-reply>.face{margin-top:8px}.thread-reply-field{background:var(--surface-2);border-radius:8px;flex:1;align-items:flex-start;gap:8px;min-width:0;padding:8px 8px 8px 12px;display:flex;position:relative;box-shadow:inset 0 0 0 1px #0000}.thread-reply-field:focus-within{box-shadow:inset 0 0 0 1px var(--accent)}.thread-reply-field textarea{flex:1;min-width:0}.comments-panel{border-radius:var(--radius-menu);background:var(--surface);width:248px;box-shadow:var(--shadow-sm);flex-direction:column;display:flex;position:fixed;top:50px;bottom:50px;right:6px}.comments-panel-head{border-bottom:1px solid var(--line-subtle);flex:none;justify-content:space-between;align-items:center;height:42px;padding:0 12px 0 16px;font-size:12px;font-weight:500;display:flex}.resolved-toggle{color:var(--muted);align-items:center;gap:4px;font-weight:400;display:flex}.resolved-toggle input{accent-color:var(--accent);margin:0}.comments-panel-list{flex:1;min-height:0;padding:6px;overflow-y:auto}.comments-empty{margin:0;padding:10px;font-size:12px}.comments-panel-item{text-align:left;border-radius:8px;width:100%;padding:8px 10px;font-size:12px;line-height:16px;display:block}.comments-panel-item:hover{background:var(--surface-hover)}.comments-panel-item.active{background:var(--selection)}.comments-panel-item>span{display:block}.comments-panel-item b{font-weight:500}.comments-panel-face{width:24px;margin-bottom:4px;position:relative}.comments-panel-face .face{display:flex}.unread-dot{background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 1.5px var(--surface);border-radius:50%;position:absolute;top:-1px;right:-3px}.comments-panel-text{-webkit-line-clamp:3;word-break:break-word;-webkit-box-orient:vertical;overflow:hidden;display:-webkit-box!important}body:has(.home){overflow:auto}.home{flex-direction:column;min-height:100%;display:flex}.home-top{justify-content:space-between;align-items:center;height:56px;padding:0 20px;display:flex}.home-me{align-items:center;gap:10px;display:flex}.home-main{flex:1;width:100%;max-width:720px;margin:0 auto;padding:24px 16px}.install{text-align:center;flex-direction:column;align-items:center;gap:20px;padding-top:22vh;display:flex}.install h1{letter-spacing:-.028em;margin:0;font-size:24px;font-weight:500;line-height:32px}.command{border-radius:var(--radius-shell);background:var(--surface);max-width:100%;height:40px;box-shadow:var(--shadow-sm);align-items:center;gap:16px;padding:0 12px 0 14px;display:flex}.command code{text-overflow:ellipsis;white-space:nowrap;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}.command span{color:var(--muted);flex:none;font-size:12px}.canvas-list{margin:0;padding:0;list-style:none}.canvas-list li{border-bottom:1px solid var(--line-subtle);align-items:center;gap:12px;display:flex}.canvas-row{flex:1;grid-template-columns:1fr auto 72px;align-items:center;gap:16px;min-width:0;height:48px;text-decoration:none;display:grid}.canvas-row .muted{font-size:12px}.canvas-row .canvas-name{height:auto;color:var(--text);line-height:inherit;padding:0}.home-foot{color:var(--muted);justify-content:center;gap:16px;padding:16px;font-size:12px;display:flex}.home-foot a{text-decoration:none}@media (width<=700px){.toolbar{top:calc(50px + env(safe-area-inset-top));left:6px;transform:none}.top-left{max-width:calc(100vw - 150px)}.follow-tab,.reconnecting,.comments-panel{top:94px}}@media (width<=640px){.wordmark{display:none}.top-left{padding-left:3px}.comments-panel{display:none}.comment-card,.composer{width:calc(100vw - 16px)!important;left:8px!important}.faces .face-button:nth-child(n+4){display:none}}
@@ -0,0 +1,15 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
+ <meta name="color-scheme" content="light dark" />
7
+ <title>Twombly</title>
8
+ <link rel="icon" href="data:," />
9
+ <script type="module" crossorigin src="/assets/index-BHNy3m8-.js"></script>
10
+ <link rel="stylesheet" crossorigin href="/assets/index-CL4B1FMQ.css">
11
+ </head>
12
+ <body>
13
+ <div id="root"></div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,9 @@
1
+ :root { color-scheme: light dark; --text: #1e1e1e; --muted: #757575; --bg: #fff; }
2
+ @media (prefers-color-scheme: dark) { :root { --text: #f5f5f5; --muted: #a0a0a0; --bg: #1e1e1e; } }
3
+ body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.6 -apple-system, system-ui, sans-serif; }
4
+ main { max-width: 620px; margin: 0 auto; padding: 48px 16px 96px; }
5
+ h1 { font-size: 24px; font-weight: 600; margin: 32px 0 4px; }
6
+ h2 { font-size: 14px; font-weight: 600; margin: 32px 0 4px; }
7
+ a { color: inherit; }
8
+ ul { padding-left: 20px; }
9
+ .muted { color: var(--muted); }
@@ -0,0 +1,37 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="color-scheme" content="light dark">
7
+ <title>Privacy – Twombly</title>
8
+ <link rel="stylesheet" href="/legal.css">
9
+ </head>
10
+ <body>
11
+ <main>
12
+ <p><a href="/">Twombly</a></p>
13
+ <h1>Privacy</h1>
14
+ <p class="muted">Updated November 4, 2026</p>
15
+ <p>Twombly is run by Materic, Inc. This explains what we keep, why, and what you can do about it.</p>
16
+ <h2>What we keep</h2>
17
+ <ul>
18
+ <li><strong>Your Google account:</strong> your name, email address, profile picture and account ID, from signing in with Google. We don't read your Gmail, contacts, files or anything else in your Google account.</li>
19
+ <li><strong>Shared canvases:</strong> the files, frame positions, titles and comments on any canvas you share.</li>
20
+ <li><strong>Comments:</strong> the text and the name you gave. If you comment as a guest, we set a cookie so your comments stay yours on that browser.</li>
21
+ <li><strong>Service logs:</strong> basic request data such as IP address and browser, held by our hosting provider, for keeping the service running and stopping abuse.</li>
22
+ </ul>
23
+ <h2>What stays on your computer</h2>
24
+ <p>A canvas you haven't shared stays on your computer. Nothing is uploaded until you click Share. Signing in saves a token in your Mac's Keychain, or in a private file on other systems, so you stay signed in.</p>
25
+ <h2>Shared links are public</h2>
26
+ <p>Anyone with a shared link can see the canvas, its comments and who is present, and can join its huddle. Links are hard to guess and we ask search engines not to index them, but they aren't private. Don't share anything you wouldn't want the person you send it to, or anyone they send it to, to see.</p>
27
+ <h2>Huddles</h2>
28
+ <p>Huddle audio passes through Cloudflare to reach the other people in it. We don't record or store it.</p>
29
+ <h2>Who else handles data</h2>
30
+ <p>We use Cloudflare for hosting, storage and huddle audio, and Google for sign-in. We don't sell your data, use it for advertising, or use your canvases to train AI models.</p>
31
+ <h2>Deleting things</h2>
32
+ <p>Stop sharing a canvas, or delete it from your list, and its files and comments are deleted from our storage straight away. Backups and caches may take up to 30 days to clear. To delete your account, email us.</p>
33
+ <h2>Contact</h2>
34
+ <p>Email <a href="mailto:jaytel@materic.inc">jaytel@materic.inc</a> with any question, or to report a canvas that shouldn't be online.</p>
35
+ </main>
36
+ </body>
37
+ </html>
@@ -0,0 +1,35 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="color-scheme" content="light dark">
7
+ <title>Terms – Twombly</title>
8
+ <link rel="stylesheet" href="/legal.css">
9
+ </head>
10
+ <body>
11
+ <main>
12
+ <p><a href="/">Twombly</a></p>
13
+ <h1>Terms</h1>
14
+ <p class="muted">Updated November 4, 2026</p>
15
+ <p>These terms are between you and Materic, Inc. Using Twombly means you agree to them.</p>
16
+ <h2>What you share</h2>
17
+ <p>Your work stays yours. You give us permission to store it and show it to anyone with its link, only so the service can work. You're responsible for what you share, including having the rights to any code, images, fonts and data in it.</p>
18
+ <h2>What you can't do</h2>
19
+ <ul>
20
+ <li>Share anything illegal, or that infringes someone's rights.</li>
21
+ <li>Share other people's private data, or credentials of any kind.</li>
22
+ <li>Use a canvas for phishing, malware, or to impersonate someone.</li>
23
+ <li>Harass people in comments or huddles.</li>
24
+ <li>Attack, overload or try to get around the limits of the service.</li>
25
+ </ul>
26
+ <p>We may take down a canvas or close an account that breaks these rules. We may do this without notice if it's urgent.</p>
27
+ <h2>The service</h2>
28
+ <p>Twombly is early. It may change, have limits added, or stop. We provide it as is, without warranties, and aren't liable for lost work, lost profits or indirect damages, to the fullest extent the law allows. Keep your own copies of anything that matters.</p>
29
+ <h2>Changes</h2>
30
+ <p>We may update these terms. If a change matters, we'll tell you here before it takes effect. Continuing to use the service means you accept the new terms.</p>
31
+ <h2>Contact</h2>
32
+ <p>Email <a href="mailto:jaytel@materic.inc">jaytel@materic.inc</a>.</p>
33
+ </main>
34
+ </body>
35
+ </html>
package/package.json CHANGED
@@ -1,6 +1,25 @@
1
1
  {
2
2
  "name": "twombly",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Put design explorations on a shared canvas. Built for agents.",
5
+ "type": "module",
6
+ "bin": { "twombly": "dist/cli.js" },
7
+ "publishConfig": { "access": "public" },
8
+ "files": ["dist", "README.md"],
9
+ "engines": { "node": ">=22" },
10
+ "scripts": {
11
+ "build": "node scripts/build.mjs",
12
+ "test": "node --test test/*.test.mjs",
13
+ "prepack": "npm run build"
14
+ },
15
+ "dependencies": {
16
+ "playwright-core": "1.64.1",
17
+ "ws": "8.22.1"
18
+ },
19
+ "devDependencies": {
20
+ "@twombly/protocol": "*",
21
+ "@types/node": "24.10.1",
22
+ "@types/ws": "8.18.1",
23
+ "esbuild": "0.28.2"
24
+ }
25
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.