:root{--bg-canvas:#f7f7f8;--bg-panel:#fff;--bg-hover:#f1f3f5;--bg-active:#e7f1ff;--border:#e2e4e8;--border-strong:#c9ccd2;--text:#1a1a1a;--text-dim:#6b7280;--text-faint:#9ca3af;--accent:#0d6efd;--accent-hover:#0b5ed7;--accent-soft:#e7f1ff;--danger:#dc3545;--warning:#e08a00;--success:#198754;--radius:8px;--radius-sm:6px;--gap:8px;--shadow:0 1px 3px #00000014, 0 4px 16px #0000000f;--shadow-lg:0 8px 32px #00000029;--topbar-h:48px;--font:"Pretendard Variable", "Pretendard", -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", system-ui, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);color:var(--text);background:var(--bg-canvas);-webkit-font-smoothing:antialiased;overscroll-behavior:none;word-break:keep-all;font-size:13px;line-height:1.45}button,input,select,textarea{font:inherit;color:inherit}h1,h2,h3,p{margin:0}.panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-title{color:var(--text-dim);padding:10px 12px 6px;font-size:12px;font-weight:600}.btn{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-panel);cursor:pointer;white-space:nowrap;justify-content:center;align-items:center;gap:6px;height:32px;padding:0 12px;transition:background .12s,border-color .12s;display:inline-flex}.btn:hover{background:var(--bg-hover)}.btn:disabled{opacity:.45;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{background:0 0;border-color:#0000}.btn-icon{width:32px;padding:0}.btn.is-active{background:var(--bg-active);border-color:var(--accent);color:var(--accent)}.input{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff;outline:none;min-width:0;height:32px;padding:0 10px}.input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.segmented{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff;display:inline-flex;overflow:hidden}.segmented>button{border:0;border-right:1px solid var(--border);cursor:pointer;background:0 0;min-width:34px;height:30px;padding:0 10px}.segmented>button:last-child{border-right:0}.segmented>button:hover{background:var(--bg-hover)}.segmented>button.is-active{background:var(--accent);color:#fff}.kbd{border:1px solid var(--border-strong);min-width:20px;font-family:var(--font-mono);text-align:center;color:var(--text-dim);background:#fafafa;border-bottom-width:2px;border-radius:4px;padding:1px 5px;font-size:11px;display:inline-block}.muted{color:var(--text-dim)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.home{--h-bg:#fff;--h-card:#fff;--h-raised:#f4f4f5;--h-raised-hover:#ebebed;--h-paper:#fff;--h-text:#171717;--h-text-2:#525252;--h-muted:#737373;--h-line:#17171714;--h-line-strong:#17171729;--h-accent:#1d4ed8;--h-negative:#dc2626;--h-ease:cubic-bezier(.22, 1, .36, 1);--h-max:1200px;--h-pad:32px;background:var(--h-bg);height:100%;color:var(--h-text);font-size:14px;line-height:20px;overflow-y:auto}.home :focus-visible{outline:2px solid var(--h-accent);outline-offset:2px}.home button{font:inherit;color:inherit}.home-nav{z-index:10;background:var(--h-bg);border-bottom:1px solid var(--h-line);position:sticky;top:0}.home-nav-inner{height:64px;max-width:var(--h-max);padding:0 var(--h-pad);justify-content:space-between;align-items:center;margin:0 auto;display:flex}.home-brand{align-items:center;gap:8px;display:flex}.home-logo{flex:none;display:block}.home-brand-name{font-size:16px;font-weight:600;line-height:1}.home-me-chip{border:1px solid var(--h-line);background:var(--h-card);cursor:pointer;height:36px;transition:background-color .15s var(--h-ease);border-radius:10px;align-items:center;gap:8px;padding:0 12px 0 6px;display:inline-flex}.home-me-chip:hover{background:var(--h-raised)}.home-avatar{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:500;display:inline-flex}.home-me-chip-name{text-overflow:ellipsis;white-space:nowrap;max-width:140px;font-weight:500;overflow:hidden}.home-hero{border-bottom:1px solid var(--h-line)}.home-hero-inner{max-width:var(--h-max);padding:80px var(--h-pad) 96px;grid-template-columns:480px minmax(0,1fr);align-items:center;gap:64px;margin:0 auto;display:grid}.home-title{letter-spacing:-.03em;font-size:clamp(34px,3.6vw,48px);font-weight:500;line-height:1.12}.home-lead{max-width:36rem;color:var(--h-text-2);margin-top:24px;font-size:18px;line-height:28px}.home-actions{flex-wrap:wrap;align-items:center;gap:12px 24px;margin-top:32px;display:flex}.home-create{background:var(--h-text);cursor:pointer;height:48px;transition:background-color .15s var(--h-ease), transform .15s var(--h-ease);border:0;border-radius:10px;padding:0 20px;color:#fff!important;font-size:15px!important;font-weight:500!important}.home-create:hover{background:#333}.home-create:active{transform:scale(.98)}.home-link{text-decoration:underline;-webkit-text-decoration-color:var(--h-line-strong);text-decoration-color:var(--h-line-strong);text-underline-offset:4px;cursor:pointer;transition:color .15s var(--h-ease);background:0 0;border:0;padding:0;color:var(--h-text-2)!important;font-weight:500!important}.home-link:hover{color:var(--h-text)!important}.home-hero-copy,.home-pv{animation:home-enter .4s var(--h-ease) both}.home-pv{animation-delay:60ms}@keyframes home-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.home-pv{border:1px solid var(--h-line-strong);background:var(--h-paper);border-radius:16px;margin:0;overflow:hidden;box-shadow:0 1px 2px #0000000d,0 8px 24px #0000000f}.home-pv-top{border-bottom:1px solid var(--h-line);align-items:center;gap:12px;height:44px;padding:0 12px 0 16px;font-size:13px;display:flex}.home-pv-title{font-weight:500}.home-pv-saved{color:var(--h-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.home-pv-saved:before{content:"";background:#16a34a;border-radius:50%;width:6px;height:6px}.home-pv-mates{margin-left:auto;display:inline-flex}.home-pv-mates b{border:2px solid var(--h-paper);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;margin-left:-6px;font-size:11px;font-weight:500;display:inline-flex}.home-pv-share{background:var(--h-text);color:#fff;border-radius:6px;align-items:center;height:28px;padding:0 12px;font-size:12px;font-weight:500;display:inline-flex}.home-pv-body{grid-template-columns:44px minmax(0,1fr);display:grid}.home-pv-tools{border-right:1px solid var(--h-line);color:var(--h-muted);flex-direction:column;align-items:center;gap:4px;padding:8px 0;display:flex}.home-pv-tool{border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.home-pv-tool.is-active{background:var(--h-raised);color:var(--h-text)}.home-pv-canvas{background-color:var(--h-paper);background-image:radial-gradient(#1717171f 1px,#0000 1px);background-size:16px 16px;overflow:hidden}.home-pv-stage{position:relative}.home-pv-stage>svg{width:100%;height:auto;display:block}.home-cursor{pointer-events:none;width:0;height:0;position:absolute}.home-cursor>svg{position:absolute;top:-2px;left:-2px}.home-cursor-name{text-overflow:ellipsis;color:#fff;white-space:nowrap;border-radius:4px 8px 8px;max-width:160px;padding:0 8px;font-size:12px;font-weight:500;line-height:20px;position:absolute;top:16px;left:12px;overflow:hidden}.home-wrap{max-width:var(--h-max);padding:0 var(--h-pad);margin:0 auto}.home-section-title{font-size:16px;font-weight:500;line-height:24px}.home-section-sub{color:var(--h-text-2);margin-top:4px}.home-label{color:var(--h-text-2);margin-bottom:8px;font-size:13px;display:block}.home-hint{color:var(--h-muted);margin-top:12px;font-size:12px;line-height:16px}.home-input{border:1px solid var(--h-line-strong);background:var(--h-paper);width:100%;min-width:0;height:40px;color:var(--h-text);font:inherit;transition:border-color .15s var(--h-ease);border-radius:8px;padding:0 12px}.home-input::placeholder{color:var(--h-muted)}.home-input:hover{border-color:#17171747}.home-input:focus-visible{outline-offset:0;border-color:var(--h-accent)}.home-input.is-invalid{border-color:var(--h-negative)}.home-btn{border:1px solid var(--h-line);background:var(--h-raised);cursor:pointer;height:40px;transition:background-color .15s var(--h-ease), transform .15s var(--h-ease);border-radius:8px;flex:none;padding:0 16px;font-weight:500!important}.home-btn:hover{background:var(--h-raised-hover)}.home-btn:active{transform:scale(.98)}.home-error{color:var(--h-negative);margin-top:8px;font-size:12px;line-height:16px}.home-start{grid-template-columns:minmax(0,1fr) 360px;align-items:start;gap:64px;padding:64px 0;display:grid}.home-recent{border:1px solid var(--h-line);background:var(--h-card);border-radius:12px;margin:16px 0 0;padding:0;list-style:none;overflow:hidden}.home-recent-item{border-top:1px solid var(--h-line);transition:background-color .15s var(--h-ease);align-items:center;gap:8px;padding-right:12px;display:flex}.home-recent-item:first-child{border-top:0}.home-recent-item:hover,.home-recent-item:focus-within{background:var(--h-raised)}.home-recent-link{min-width:0;color:inherit;flex:auto;align-items:center;gap:16px;padding:12px 4px 12px 16px;text-decoration:none;display:flex}.home-recent-link:focus-visible{outline-offset:-2px;border-radius:10px}.home-recent-main{flex-direction:column;flex:auto;gap:4px;min-width:0;display:flex}.home-recent-title{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.home-recent-code{text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);color:var(--h-muted);font-size:12px;line-height:16px;overflow:hidden}.home-recent-time{text-align:right;min-width:64px;color:var(--h-text-2);font-variant-numeric:tabular-nums;flex:none;font-size:13px}.home-recent-forget{cursor:pointer;opacity:0;height:28px;transition:opacity .15s var(--h-ease), color .15s var(--h-ease);background:0 0;border:0;border-radius:6px;flex:none;padding:0 8px;color:var(--h-muted)!important;font-size:12px!important}.home-recent-item:hover .home-recent-forget,.home-recent-forget:focus-visible{opacity:1}.home-recent-forget:hover{color:var(--h-negative)!important}@media (hover:hover){.home-recent-item{padding-right:0;position:relative}.home-recent-link{padding-right:16px}.home-recent-time{transition:opacity .15s var(--h-ease)}.home-recent-forget{margin-top:-14px;position:absolute;top:50%;right:8px}.home-recent-item:hover .home-recent-time,.home-recent-item:focus-within .home-recent-time{opacity:0}.home-recent-item:focus-within .home-recent-forget{opacity:1}}@media (hover:none){.home-recent-forget{opacity:1}}.home-empty{border:1px solid var(--h-line);background:var(--h-card);border-radius:12px;margin-top:16px;padding:24px}.home-empty-title{font-weight:500}.home-empty-body{color:var(--h-text-2);margin-top:4px}.home-join-row{gap:8px;display:flex}.home-profile{margin-top:40px}.home-profile-preview{border:1px solid var(--h-line);background-color:var(--h-paper);background-image:radial-gradient(#1717171f 1px,#0000 1px);background-size:16px 16px;border-radius:12px;height:72px;margin:16px 0;position:relative}.home-profile-preview .home-cursor{top:20px;left:36%}.home-colors{flex-wrap:wrap;gap:12px;margin-top:16px;display:flex}.home-color{cursor:pointer;border:0;border-radius:50%;width:20px;height:20px;padding:0}.home-color.is-active{outline:2px solid var(--h-text);outline-offset:2px}.home-facts{border-top:1px solid var(--h-line);grid-template-columns:repeat(3,minmax(0,1fr));gap:48px;padding:48px 0;display:grid}.home-fact-title{font-size:15px;font-weight:500;line-height:20px}.home-fact-body{max-width:28em;color:var(--h-text-2);margin-top:8px;font-size:14px;line-height:22px}.home-notation{border-top:1px solid var(--h-line);padding:48px 0 96px}.home-sheet{border:1px solid var(--h-line);background:var(--h-paper);border-radius:16px;margin-top:24px;overflow:hidden}.home-sheet-row{border-top:1px solid var(--h-line);grid-template-columns:120px minmax(0,1fr);gap:16px;padding:20px 24px;display:grid}.home-sheet-row:first-child{border-top:0}.home-sheet-group{color:var(--h-text-2);padding-top:24px;font-size:13px;font-weight:500;line-height:20px}.home-sheet-items{flex-wrap:wrap;gap:16px 24px;margin:0;padding:0;list-style:none;display:flex}.home-sheet-item{flex-direction:column;width:148px;display:flex}.home-sheet-item>svg{display:block}.home-sheet-name{text-align:center;margin-top:8px;font-size:13px;font-weight:500;line-height:20px}.home-sheet-en{color:var(--h-muted);text-align:center;font-size:12px;line-height:16px}.home-foot{border-top:1px solid var(--h-line)}.home-foot-inner{max-width:var(--h-max);padding:24px var(--h-pad);color:var(--h-muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 24px;margin:0 auto;font-size:12px;line-height:16px;display:flex}.home-foot-brand{color:var(--h-text);align-items:center;gap:8px;font-weight:500;display:inline-flex}@media (width<=1080px){.home-hero-inner{padding:64px var(--h-pad);grid-template-columns:minmax(0,1fr);gap:48px}.home-start{grid-template-columns:minmax(0,1fr);gap:48px}.home-profile{margin-top:32px}}@media (width<=720px){.home{--h-pad:16px}.home-hero-inner{padding:48px var(--h-pad) 56px;gap:40px}.home-lead{font-size:16px;line-height:26px}.home-facts{grid-template-columns:minmax(0,1fr);gap:24px;padding:40px 0}.home-start{padding:48px 0}.home-notation{padding:40px 0 64px}.home-sheet-row{grid-template-columns:minmax(0,1fr);gap:4px;padding:16px}.home-sheet-group{padding-top:0}.home-sheet-items{justify-content:space-between;gap:16px 8px}.home-pv-tools{display:none}.home-pv-stage{width:170%}.home-pv-body{grid-template-columns:minmax(0,1fr)}.home-me-chip-name{display:none}.home-me-chip{padding:0 6px}.home-recent-time{min-width:0}}@media (prefers-reduced-motion:reduce){.home-hero-copy,.home-pv{animation:none}.home-create,.home-btn,.home-me-chip,.home-recent-item{transition:none}}.viewport-grid{pointer-events:none}.viewport-grid-dot{fill:var(--border-strong)}.zoom-controls{-webkit-user-select:none;user-select:none;align-items:center;gap:2px;padding:4px;display:flex}.zoom-controls .btn{height:28px;color:var(--text-dim)}.zoom-controls .btn:hover:not(:disabled){color:var(--text)}.zoom-controls .btn-icon{width:28px}.zoom-controls .btn.is-active{color:var(--accent);border-color:#0000}.zoom-controls-level{font-variant-numeric:tabular-nums;min-width:52px;padding:0 6px;font-size:12px}.zoom-controls-sep{background:var(--border);width:1px;height:16px;margin:0 4px}.minimap{-webkit-user-select:none;user-select:none;line-height:0;overflow:hidden}.minimap-svg{background:var(--bg-canvas);cursor:pointer;touch-action:none;display:block}.minimap-svg.is-dragging{cursor:grabbing}.minimap-edge{fill:none;stroke:var(--border-strong);stroke-width:1px;vector-effect:non-scaling-stroke;pointer-events:none}.minimap-node{fill:var(--bg-panel);stroke:var(--text-dim);stroke-width:1px;vector-effect:non-scaling-stroke;pointer-events:none}.minimap-node-note{stroke:var(--border-strong)}.minimap-view{fill:var(--accent);fill-opacity:.14;stroke:var(--accent);stroke-width:1px;pointer-events:none}.nickname-overlay{z-index:1000;background:#11182766;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.nickname-dialog{width:340px;max-width:100%;box-shadow:var(--shadow-lg);outline:none;padding:20px}.nickname-title{font-size:16px;font-weight:700}.nickname-hint{color:var(--text-dim);margin-top:4px}.nickname-row{align-items:center;gap:10px;margin-top:16px;display:flex}.nickname-preview{color:#fff;text-shadow:0 0 2px #0000004d;-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;justify-content:center;align-items:center;width:32px;height:32px;font-size:13px;font-weight:700;display:inline-flex}.nickname-input{flex:auto}.nickname-label{color:var(--text-dim);margin-top:16px;font-size:12px;font-weight:600}.nickname-colors{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.nickname-color{border:2px solid var(--bg-panel);cursor:pointer;border-radius:50%;width:24px;height:24px;padding:0;transition:transform .12s,box-shadow .12s}.nickname-color:hover{transform:scale(1.1)}.nickname-color:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.nickname-color.is-active{box-shadow:0 0 0 2px var(--text)}.nickname-actions{justify-content:flex-end;margin-top:20px;display:flex}.nickname-actions .btn{min-width:72px}.presence-cursors{pointer-events:none;z-index:5;position:absolute;inset:0;overflow:hidden}.presence-cursor{will-change:transform;width:0;height:0;transition:transform 80ms linear;position:absolute;top:0;left:0}.presence-cursors.is-instant .presence-cursor{transition:none}.presence-cursor-arrow{filter:drop-shadow(0 1px 2px #00000040);display:block;position:absolute;top:-2px;left:-2px;overflow:visible}.presence-cursor-name{background:var(--presence-color);color:#fff;white-space:nowrap;text-overflow:ellipsis;text-shadow:0 0 2px #0000004d;border-radius:3px 8px 8px;max-width:160px;padding:2px 7px;font-size:11px;font-weight:600;line-height:16px;position:absolute;top:16px;left:13px;overflow:hidden;box-shadow:0 1px 3px #0000002e}.presence-cursor-edge{border:1px solid var(--border);background:var(--bg-panel);max-width:124px;height:22px;box-shadow:var(--shadow);color:var(--text-dim);white-space:nowrap;border-radius:11px;align-items:center;gap:5px;padding:0 8px 0 6px;font-size:11px;font-weight:600;display:inline-flex;position:absolute;top:0;left:0}.presence-cursor-edge-dot{background:var(--presence-color);border-radius:50%;flex:none;width:8px;height:8px}.presence-cursor-edge-name{text-overflow:ellipsis;min-width:0;overflow:hidden}.presence-avatars{align-items:center;gap:4px;display:inline-flex}.presence-avatar{border:2px solid var(--bg-panel);background:var(--presence-color);color:#fff;text-shadow:0 0 2px #0000004d;cursor:default;-webkit-user-select:none;user-select:none;border-radius:50%;flex:none;justify-content:center;align-items:center;width:28px;height:28px;padding:0;font-size:12px;font-weight:700;line-height:1;transition:transform .12s,box-shadow .12s;display:inline-flex}.presence-avatar.is-clickable{cursor:pointer}.presence-avatar.is-clickable:hover{transform:translateY(-1px)}.presence-avatar:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.presence-avatar.is-me{box-shadow:0 0 0 2px var(--text);margin-right:4px}.presence-avatar-more{background:var(--bg-hover);color:var(--text-dim);text-shadow:none;font-size:11px}@media (prefers-reduced-motion:reduce){.presence-cursor,.presence-avatar{transition:none}}.text-editor{z-index:2;transform-origin:0 0;color:var(--text);cursor:text;justify-content:center;align-items:center;display:flex;position:absolute}.text-editor-grow{flex:none;min-width:100%;position:relative}.text-editor-mirror,.text-editor-input{font:inherit;line-height:inherit;letter-spacing:inherit;white-space:pre;text-align:center;word-break:normal;overflow-wrap:normal;border:0;margin:0;padding:0 6px}.text-editor-mirror{visibility:hidden;pointer-events:none;-webkit-user-select:none;user-select:none}.text-editor-input{width:100%;height:100%;box-shadow:none;color:inherit;caret-color:var(--accent);resize:none;scrollbar-width:none;appearance:none;background:0 0;border-radius:0;outline:none;display:block;position:absolute;inset:0;overflow:hidden}.text-editor-input::-webkit-scrollbar{display:none}.text-editor.is-key .text-editor-input{text-underline-offset:3px;text-decoration:underline}.text-editor.is-partial-key .text-editor-input{text-underline-offset:3px;-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.canvas-root{touch-action:none;background:var(--bg-canvas);-webkit-user-select:none;user-select:none;position:absolute;inset:0;overflow:hidden}.canvas-svg{outline:none;width:100%;height:100%;display:block}.canvas-svg text{-webkit-user-select:none;user-select:none}.canvas-root[data-cursor=select] .canvas-svg [data-node-id]{cursor:move}.canvas-root[data-cursor=select] .canvas-svg [data-edge-id]{cursor:pointer}.canvas-root[data-cursor=forced] .canvas-svg,.canvas-root[data-cursor=forced] .canvas-svg *{cursor:inherit!important}.canvas-sel-outline,.canvas-sel-group{fill:none;stroke:var(--accent);stroke-width:1px;vector-effect:non-scaling-stroke;pointer-events:none}.canvas-sel-group{stroke-dasharray:4 3}.canvas-handle{fill:#fff;stroke:var(--accent);stroke-width:1px;vector-effect:non-scaling-stroke}.canvas-handle-hit{fill:#0000;stroke:none}.canvas-connect-dot{cursor:crosshair}.canvas-connect-dot-hit{fill:#0000;stroke:none}.canvas-connect-dot-mark{fill:#fff;stroke:var(--accent);stroke-width:1.5px;vector-effect:non-scaling-stroke;transition:fill .1s}.canvas-connect-dot:hover .canvas-connect-dot-mark{fill:var(--accent)}.canvas-draft-line{stroke:var(--accent);stroke-width:1.5px;vector-effect:non-scaling-stroke;fill:none}.canvas-draft-line.is-invalid{stroke:var(--danger);stroke-dasharray:5 4}.canvas-draft-target{fill:none;stroke-width:2px;vector-effect:non-scaling-stroke}.canvas-draft-target.is-valid{stroke:var(--accent);fill:#0d6efd0f}.canvas-draft-target.is-invalid{stroke:var(--danger);fill:#dc35450f}.canvas-connect-reason{z-index:5;border-radius:var(--radius-sm);background:var(--danger);color:#fff;width:max-content;max-width:280px;box-shadow:var(--shadow);pointer-events:none;word-break:keep-all;overflow-wrap:anywhere;padding:4px 8px;font-size:12px;line-height:1.4;position:absolute}.canvas-anchor{fill:#fff;stroke:var(--accent);stroke-width:1.5px;vector-effect:non-scaling-stroke}.canvas-anchor.is-active{fill:var(--accent);stroke:#fff;stroke-width:2px}.canvas-edge-end{cursor:crosshair}.canvas-edge-end-hit{fill:#0000;stroke:none}.canvas-edge-end-mark,.canvas-edge-end-ghost{fill:#fff;stroke:var(--accent);stroke-width:1.5px;vector-effect:non-scaling-stroke}.canvas-edge-end:hover .canvas-edge-end-mark{fill:var(--accent-soft)}.canvas-edge-end.is-dragging .canvas-edge-end-mark{opacity:.35}.canvas-edge-end-preview{stroke:var(--accent);stroke-width:1px;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;fill:none}.canvas-marquee{fill:#0d6efd14;stroke:var(--accent);stroke-width:1px;vector-effect:non-scaling-stroke}.canvas-empty{text-align:center;color:var(--text-faint);pointer-events:none;white-space:nowrap;flex-direction:column;align-items:center;gap:4px;font-size:13px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.canvas-empty-title{color:var(--text-dim);margin-bottom:6px;font-size:15px;font-weight:600}.toast-stack{z-index:2000;pointer-events:none;flex-direction:column;align-items:center;gap:8px;width:max-content;max-width:calc(100vw - 32px);display:flex;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}.toast-item{pointer-events:auto;border-radius:var(--radius);background:var(--text);color:#fff;max-width:min(560px,100vw - 32px);box-shadow:var(--shadow-lg);text-align:center;cursor:default;padding:9px 14px;font-size:13px;line-height:1.45;animation:.16s ease-out toast-in}.toast-error{background:var(--danger)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.toast-item{animation:none}}.contextmenu{z-index:500;min-width:196px;max-width:280px;max-height:calc(100vh - 16px);box-shadow:var(--shadow-lg);-webkit-user-select:none;user-select:none;padding:4px;position:fixed;overflow-y:auto}.contextmenu-item{align-items:center;gap:var(--gap);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;outline:none;width:100%;height:28px;padding:0 8px;display:flex}.contextmenu-item:hover:not(:disabled),.contextmenu-item:focus-visible{background:var(--bg-hover)}.contextmenu-item:disabled{color:var(--text-faint);cursor:default}.contextmenu-item.is-danger:not(:disabled){color:var(--danger)}.contextmenu-check{height:12px;color:var(--accent);flex:0 0 12px;justify-content:center;align-items:center;display:inline-flex}.contextmenu-label{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.contextmenu-hint{color:var(--text-faint);white-space:nowrap;flex:none;margin-left:16px;font-size:12px}.contextmenu-item.is-danger:not(:disabled) .contextmenu-hint{color:var(--text-faint)}.contextmenu-heading{color:var(--text-dim);padding:4px 8px 2px;font-size:11px;font-weight:600}.contextmenu-separator{background:var(--border);height:1px;margin:4px 0}.helpoverlay-backdrop{z-index:1000;background:#11182752;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.helpoverlay{width:min(720px,100%);max-height:min(820px,100%);box-shadow:var(--shadow-lg);outline:none;flex-direction:column;display:flex}.helpoverlay-header{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;padding:12px 12px 12px 20px;display:flex}.helpoverlay-title{font-size:16px;font-weight:700}.helpoverlay-body{overscroll-behavior:contain;flex:auto;min-height:0;padding:16px 20px 20px;overflow-y:auto}.helpoverlay-columns{grid-template-columns:1fr 1fr;gap:0 32px;display:grid}.helpoverlay-column{min-width:0}.helpoverlay-group{margin-bottom:16px}.helpoverlay-group-title{color:var(--text-dim);margin-bottom:4px;font-size:12px;font-weight:600}.helpoverlay-table{border-collapse:collapse;width:100%}.helpoverlay-table tr+tr{border-top:1px solid var(--border)}.helpoverlay-table th{text-align:left;padding:4px 8px 4px 0;font-weight:400}.helpoverlay-table td{text-align:right;white-space:nowrap;padding:4px 0}.helpoverlay-table .kbd+.kbd{margin-left:4px}.helpoverlay-mouse{border-top:1px solid var(--border);padding-top:16px}.helpoverlay-tips{color:var(--text);margin:0;padding-left:18px}.helpoverlay-tips li+li{margin-top:4px}@media (width<=600px){.helpoverlay-columns{grid-template-columns:1fr}}.inspector{flex-direction:column;flex:0 auto;width:260px;min-height:0;display:flex}.inspector-title{border-bottom:1px solid var(--border);flex:none;padding-bottom:8px}.inspector-body{overscroll-behavior:contain;flex:auto;min-height:0;overflow-y:auto}.inspector-keyed{display:contents}.inspector-footer{border-top:1px solid var(--border);flex:none;padding:10px 12px}.inspector-section{gap:var(--gap);border-bottom:1px solid var(--border);flex-direction:column;padding:10px 12px 12px;display:flex}.inspector-section:last-child{border-bottom:0}.inspector-section-title{color:var(--text-dim);font-size:11px;font-weight:600}.inspector-hint{color:var(--text-dim);font-size:12px}.inspector-wide{width:100%}.inspector-presets{grid-template-columns:repeat(6,1fr);gap:4px;display:grid}.inspector-preset{border-radius:var(--radius-sm);height:34px;color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s;display:flex}.inspector-preset:hover{background:var(--bg-hover)}.inspector-preset.is-active{background:var(--bg-active);border-color:var(--accent);color:var(--accent)}.inspector-preset:focus-visible,.inspector-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.inspector-preset-name{font-size:12px}.inspector-input{width:100%}.inspector-textarea{resize:vertical;height:auto;min-height:50px;max-height:200px;padding:6px 10px;line-height:18px;display:block}.inspector-input:disabled{background:var(--bg-hover);color:var(--text-faint)}.inspector-row{flex-direction:column;gap:4px;display:flex}.inspector-row-label{font-size:12px}.inspector-segmented{width:100%;display:flex}.inspector-segmented>button{flex:1 1 0;min-width:0;padding:0 6px}.inspector-segmented>button:disabled{color:var(--text-faint);cursor:default}.inspector-segmented>button:disabled:hover{background:0 0}.inspector-segmented>button.is-active:hover{background:var(--accent-hover)}.inspector-segmented>button.is-active:disabled{background:var(--border-strong);color:#fff}.inspector-toggle{justify-content:space-between;align-items:center;gap:var(--gap);border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:0;width:100%;height:30px;padding:0 2px;display:flex}.inspector-toggle:hover .inspector-switch{border-color:var(--text-faint)}.inspector-switch{border:1px solid var(--border-strong);background:var(--bg-hover);border-radius:9px;flex:none;width:30px;height:18px;transition:background .12s,border-color .12s;position:relative}.inspector-switch:after{content:"";width:12px;height:12px;box-shadow:0 0 0 1px var(--border-strong);background:#fff;border-radius:50%;transition:transform .12s;position:absolute;top:2px;left:2px}.inspector-toggle.is-on .inspector-switch,.inspector-toggle.is-on:hover .inspector-switch{background:var(--accent);border-color:var(--accent)}.inspector-toggle.is-on .inspector-switch:after{box-shadow:none;transform:translate(12px)}.inspector-toggle.is-mixed .inspector-switch{background:var(--accent-soft);border-color:var(--accent)}.inspector-toggle.is-mixed .inspector-switch:after{background:var(--accent);box-shadow:none;transform:translate(6px)}.inspector-size{gap:var(--gap);grid-template-columns:1fr 1fr;display:grid}.inspector-size-field{flex-direction:column;gap:4px;min-width:0;font-size:12px;display:flex}.inspector-edge-name,.inspector-summary{border-bottom:1px solid var(--border);padding:10px 12px;font-weight:600}.inspector-edge-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.inspector-cardinality{gap:var(--gap);flex-direction:column;display:flex}.inspector-ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.inspector-segmented>button>svg{margin:0 auto;display:block}.inspector-reset{height:26px;color:var(--text-dim);align-self:flex-end;padding:0 8px;font-size:12px}.inspector-align{gap:4px;display:flex}.inspector-align>.btn-icon{flex:1 1 0;min-width:0}.inspector-distribute{flex:1 1 0;min-width:0;padding:0 8px;font-size:12px}.inspector-delete{width:100%;color:var(--danger)}.inspector-delete:hover{border-color:var(--danger)}.issues-panel{flex-direction:column;flex:0 auto;width:300px;max-width:100%;min-height:80px;display:flex;overflow:hidden}.issues-header{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;padding:6px 6px 6px 12px;display:flex}.issues-title{font-size:13px;font-weight:600}.issues-close{width:28px;height:28px;color:var(--text-dim)}.issues-summary{border-bottom:1px solid var(--border);color:var(--text-faint);font-variant-numeric:tabular-nums;flex:none;gap:14px;padding:8px 12px;display:flex}.issues-count{align-items:center;gap:6px;display:inline-flex}.issues-count.is-error,.issues-count.is-warning{color:var(--text);font-weight:600}.issues-count .issues-icon{opacity:.35}.issues-count.is-error .issues-icon,.issues-count.is-warning .issues-icon{opacity:1}.issues-icon{flex:none}.issues-icon-error{color:var(--danger)}.issues-icon-warning{color:var(--warning)}.issues-icon-ok{color:var(--success)}.issues-list{overscroll-behavior:contain;flex:auto;min-height:0;margin:0;padding:4px;list-style:none;overflow-y:auto}.issues-item{border-radius:var(--radius-sm);text-align:left;cursor:pointer;background:0 0;border:0;align-items:flex-start;gap:8px;width:100%;padding:7px 8px;transition:background .12s;display:flex}.issues-item:hover{background:var(--bg-hover)}.issues-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.issues-item.is-active{background:var(--bg-active)}.issues-item .issues-icon{margin-top:1px}.issues-message{overflow-wrap:anywhere;flex:auto;min-width:0}.issues-empty{color:var(--text-dim);align-items:center;gap:8px;padding:14px 12px;display:flex}.legend{flex-direction:column;flex:0 auto;width:300px;min-height:0;display:flex;overflow:hidden}.legend-head{padding:calc(var(--gap) / 2) calc(var(--gap) / 2) calc(var(--gap) / 2) calc(var(--gap) * 1.5);border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;display:flex}.legend-title{font-size:13px;font-weight:600}.legend-close{color:var(--text-dim)}.legend-body{min-height:0;padding:0 calc(var(--gap) * 1.5) calc(var(--gap) * 1.25);overscroll-behavior:contain;flex:auto;overflow-y:auto}.legend-section+.legend-section{border-top:1px solid var(--border)}.legend-section-title{padding:calc(var(--gap) * 1.25) 0 calc(var(--gap) / 4);color:var(--text-dim);font-size:11px;font-weight:600}.legend-list{padding:0 0 var(--gap);margin:0;list-style:none}.legend-row{align-items:center;column-gap:calc(var(--gap) * 1.25);padding:calc(var(--gap) / 4) 0;grid-template-columns:36px minmax(0,1fr);display:grid}.legend-icon{height:32px;color:var(--text);justify-content:center;align-items:center;display:flex}.legend-icon>svg{display:block}.legend-name{font-weight:600}.legend-en{margin-left:calc(var(--gap) * .75);color:var(--text-faint);font-size:11px}.legend-desc{color:var(--text-dim);font-size:12px;display:block}.legend-foot{padding-top:calc(var(--gap) * 1.25);border-top:1px solid var(--border);color:var(--text-faint);font-size:11px}.toolbar{flex-direction:column;flex:0 auto;width:52px;min-height:0;max-height:100%;display:flex;overflow:hidden}.toolbar-scroll{overscroll-behavior:contain;scrollbar-width:none;flex-direction:column;align-items:center;min-height:0;padding:5px;display:flex;overflow-y:auto}.toolbar-scroll::-webkit-scrollbar{display:none}.toolbar-scroll[data-more-down]{-webkit-mask-image:linear-gradient(#000 calc(100% - 28px),#0000);mask-image:linear-gradient(#000 calc(100% - 28px),#0000)}.toolbar-scroll[data-more-up]{-webkit-mask-image:linear-gradient(0deg,#000 calc(100% - 28px),#0000);mask-image:linear-gradient(0deg,#000 calc(100% - 28px),#0000)}.toolbar-scroll[data-more-up][data-more-down]{-webkit-mask-image:linear-gradient(#0000,#000 28px calc(100% - 28px),#0000);mask-image:linear-gradient(#0000,#000 28px calc(100% - 28px),#0000)}.toolbar-group{gap:calc(var(--gap) / 4);flex-direction:column;flex:none;display:flex}.toolbar-sep{height:1px;margin:calc(var(--gap) / 2) calc(var(--gap) * .75);background:var(--border);flex:none;align-self:stretch}.toolbar-btn{border-radius:var(--radius-sm);width:40px;height:40px;color:var(--text);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:flex;position:relative}.toolbar-btn:hover{background:var(--bg-hover)}.toolbar-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.toolbar-btn.is-active{background:var(--bg-active);color:var(--accent)}.toolbar-btn>svg{pointer-events:none;display:block}.toolbar-lock{color:var(--accent);position:absolute;top:3px;right:3px}@media (height<=800px){.toolbar-btn{height:34px}}.toolbar-tip{z-index:100;width:max-content;max-width:232px;padding:var(--gap) calc(var(--gap) * 1.25);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);box-shadow:var(--shadow);pointer-events:none;animation:.12s ease-out .3s both toolbar-tip-in;position:fixed;transform:translateY(-50%)}.toolbar-tip-head{justify-content:space-between;align-items:center;gap:calc(var(--gap) * 1.5);display:flex}.toolbar-tip-name{font-weight:600}.toolbar-tip-keys{flex:none;align-items:center;display:inline-flex}.toolbar-tip-key{align-items:center;display:inline-flex}.toolbar-tip-plus{margin:0 calc(var(--gap) / 4);color:var(--text-faint);font-size:11px}.toolbar-tip-en{color:var(--text-faint);font-size:11px}.toolbar-tip-desc{margin-top:calc(var(--gap) / 2);color:var(--text-dim);font-size:12px}.toolbar-tip-hint{margin-top:calc(var(--gap) * .75);padding-top:calc(var(--gap) * .75);border-top:1px solid var(--border);color:var(--text-faint);font-size:11px}@keyframes toolbar-tip-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.toolbar-tip{animation-duration:0s}}.topbar{justify-content:space-between;align-items:center;gap:12px;min-width:0;height:100%;padding:0 10px;display:flex}.topbar-group{align-items:center;gap:6px;min-width:0;display:flex}.topbar-left{flex:auto}.topbar-right{flex:none}.topbar-icon,.topbar-logo{flex:none;display:block}.topbar-home{flex:none;gap:7px;padding:0 8px}.topbar-logo{color:var(--accent)}.topbar-brand{letter-spacing:-.01em;font-weight:700}.topbar-divider{background:var(--border);flex:none;width:1px;height:20px}.topbar-title{flex:0 auto;min-width:72px;max-width:360px;display:inline-grid}.topbar-title-mirror,.topbar-title-input{border:1px solid #0000;grid-area:1/1;height:30px;padding:0 8px;font-size:14px;font-weight:600;line-height:28px}.topbar-title-mirror{visibility:hidden;white-space:pre;pointer-events:none;overflow:hidden}.topbar-title-input{border-radius:var(--radius-sm);text-overflow:ellipsis;background:0 0;outline:none;width:100%;min-width:0}.topbar-title-input::placeholder{color:var(--text-faint);font-weight:500}.topbar-title-input:hover{background:var(--bg-hover)}.topbar-title-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);text-overflow:clip;background:#fff}.topbar-status{color:var(--text-dim);white-space:nowrap;cursor:default;flex:none;align-items:center;gap:6px;padding:0 6px;font-size:12px;display:inline-flex}.topbar-status-dot{background:var(--text-faint);border-radius:50%;width:8px;height:8px}.topbar-status-connected .topbar-status-dot{background:var(--success)}.topbar-status-connecting .topbar-status-dot{background:var(--warning);animation:1.2s ease-in-out infinite topbar-pulse}.topbar-status-connecting{color:var(--warning)}.topbar-status-disconnected .topbar-status-dot{background:var(--danger)}.topbar-status-disconnected{color:var(--danger);font-weight:600}@keyframes topbar-pulse{0%,to{opacity:1}50%{opacity:.35}}.topbar-history{flex:none;align-items:center;gap:2px;display:flex}.topbar-btn{padding:0 10px}.topbar-badge{color:#fff;border-radius:9px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.topbar-badge-error{background:var(--danger)}.topbar-badge-warning{background:var(--warning)}.topbar-avatars{flex:none;align-items:center;margin-left:4px;display:flex}.topbar-avatars:empty{display:none}.topbar-pop-wrap{flex:none;display:flex;position:relative}.topbar-menu{z-index:40;width:236px;max-width:calc(100vw - 16px);box-shadow:var(--shadow-lg);padding:6px;position:absolute;top:calc(100% + 8px);right:0}.topbar-menu-item{border-radius:var(--radius-sm);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;width:100%;height:34px;padding:0 10px;display:flex}.topbar-menu-item:hover:not(:disabled),.topbar-menu-item:focus-visible{background:var(--bg-hover);outline:none}.topbar-menu-item:disabled{opacity:.45;cursor:default}.topbar-menu-item .topbar-icon{color:var(--text-dim)}.topbar-menu-text{flex:auto}.topbar-menu-hint{color:var(--text-faint);flex:none;font-size:11px}.topbar-menu-sep{background:var(--border);height:1px;margin:6px 4px}.topbar-menu-note{border-top:1px solid var(--border);color:var(--text-dim);white-space:normal;margin:6px 4px 2px;padding:8px 6px 2px;font-size:12px}.topbar-file{display:none}.topbar-share{z-index:40;width:min(400px,100vw - 16px);box-shadow:var(--shadow-lg);padding:12px;position:absolute;top:calc(100% + 8px);right:0}.topbar-share-text{color:var(--text-dim);margin-bottom:10px;font-size:12px}.topbar-share-row{gap:6px;display:flex}.topbar-share-input{font-family:var(--font-mono);flex:auto;font-size:12px}.topbar-modal-backdrop{z-index:1000;background:#11182752;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.topbar-modal{width:min(440px,100%);box-shadow:var(--shadow-lg);padding:20px}.topbar-modal-title{margin-bottom:8px;font-size:16px;font-weight:700}.topbar-modal-text{color:var(--text-dim);margin-bottom:16px}.topbar-modal-file{color:var(--text);word-break:break-all;font-weight:600}.topbar-modal-actions{flex-direction:column;gap:8px;display:flex}.topbar-modal-actions .btn{width:100%;height:36px}.topbar-btn-danger{border-color:var(--danger);color:var(--danger)}.topbar-btn-danger:hover{background:var(--danger);color:#fff}@media (width<=900px){.topbar{gap:6px;padding:0 6px}.topbar-group{gap:2px}.topbar-label,.topbar-brand,.topbar-divider{display:none}.topbar-btn{padding:0 8px}.topbar-home{padding:0 6px}.topbar-title{max-width:220px}}@media (width<=640px){.topbar-status-label{display:none}.topbar-title{min-width:48px;max-width:140px}.topbar-menu,.topbar-share{top:calc(var(--topbar-h) + 4px);position:fixed;right:8px}}@media (prefers-reduced-motion:reduce){.topbar-status-connecting .topbar-status-dot{animation:none}}.room{background:var(--bg-canvas);flex-direction:column;display:flex;position:fixed;inset:0}.room-top{flex:0 0 var(--topbar-h);height:var(--topbar-h);background:var(--bg-panel);border-bottom:1px solid var(--border);z-index:30}.room-body{flex:auto;min-height:0;position:relative;overflow:hidden}.slot{z-index:20;pointer-events:none;gap:var(--gap);display:flex;position:absolute}.slot>*{pointer-events:auto}.slot-left{flex-direction:column;justify-content:flex-start;top:12px;bottom:12px;left:12px}.slot-right{flex-direction:column;align-items:flex-end;top:12px;bottom:12px;right:12px;overflow:hidden}.slot-right>*{max-height:100%}.slot-bottom-left{align-items:flex-end;bottom:12px;left:84px}.slot-bottom-right{align-items:flex-end;bottom:12px;right:12px}.room-body[data-minimap=on] .slot-right{bottom:176px}.room-blocked-overlay{z-index:1100;background:#11182766;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.room-blocked{width:360px;max-width:100%;box-shadow:var(--shadow-lg);padding:20px}.room-blocked-title{font-size:16px;font-weight:700}.room-blocked-body{color:var(--text-dim);margin-top:6px;line-height:1.5}.room-blocked-actions{justify-content:flex-end;gap:8px;margin-top:20px;display:flex}
