.app{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden}.canvas{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;background:#fafaf7;cursor:default}.canvas--editing{background:#fbfaf3;box-shadow:inset 0 0 0 2px #2563eb1f}.canvas--placement-mode,.canvas--placement-mode .canvas-inner{cursor:crosshair}.canvas-inner{position:relative;width:6000px;height:4000px}.formula{position:absolute;display:flex;flex-direction:row;align-items:center;gap:4px;white-space:nowrap}.element{position:relative;display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 8px;font-size:22px;font-family:JetBrains Mono,SF Mono,Menlo,Consolas,monospace;line-height:1;color:#2a2a2a;background:transparent;border:2px solid transparent;border-radius:10px;white-space:nowrap;cursor:pointer;transition:border-color .08s,background .08s;-webkit-user-select:none;user-select:none}.element--multi-selected,.label--multi-selected{border-color:#2563eb;background:color-mix(in srgb,#2563eb 10%,transparent)}.element--empty{min-width:14px;width:14px;padding:0}.element--selected{border-color:#2a2a2a;background:#2a2a2a2e}.element--selected.element--ref{border-color:var(--formula-color, #2a2a2a);background:color-mix(in srgb,var(--formula-color, currentColor) 22%,transparent);color:var(--formula-color, currentColor)!important;font-weight:700}.element--inline-cursor:after{content:"";display:inline-block;width:1.5px;height:22px;background:#2a2a2a;margin-left:2px;animation:blink 1s steps(2,end) infinite}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.element--op,.element--paren{color:#4a4a4a}.element--equals{color:#2a2a2a;font-weight:600}.element--ref{font-weight:500;border-color:currentColor}.result{position:relative;display:inline-flex;align-items:center;justify-content:center;height:36px;padding:0 8px;margin-left:4px;font-size:22px;font-family:JetBrains Mono,SF Mono,Menlo,Consolas,monospace;line-height:1;font-weight:600;border:2px solid transparent;border-radius:10px;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.result--unselected-highlighted{font-weight:600}.result--selected{border-color:var(--formula-color, currentColor);background:color-mix(in srgb,var(--formula-color, currentColor) 22%,transparent);color:var(--formula-color, currentColor)!important;font-weight:700}.result--error{font-weight:400;font-size:16px;font-style:italic}.label{position:absolute;display:inline-block;padding:6px 10px;font-size:18px;line-height:1.4;font-family:Georgia,Songti SC,STSong,"Source Han Serif SC",serif;color:#4a4a4a;background:transparent;border:1.5px dashed transparent;border-radius:4px;cursor:text;-webkit-user-select:none;user-select:none;white-space:pre-wrap;max-width:480px;transition:background .1s,border-color .1s,box-shadow .1s}.font--standard{font-family:Georgia,Songti SC,STSong,"Source Han Serif SC",serif}.font--caveat{font-family:Caveat,Comic Sans MS,Songti SC,cursive}.font--kalam{font-family:Kalam,Comic Sans MS,Songti SC,cursive}.font--dancing{font-family:Dancing Script,Comic Sans MS,Songti SC,cursive}.font--patrick{font-family:Patrick Hand,Comic Sans MS,Songti SC,cursive}.font--mshan{font-family:Ma Shan Zheng,KaiTi,STKaiti,Songti SC,cursive}.font--longcang{font-family:Long Cang,STKaiti,KaiTi,Songti SC,cursive}.label--font-caveat{font-size:26px;line-height:1.2;font-weight:500}.label--font-kalam{font-size:20px;line-height:1.3;font-weight:400}.label--font-dancing{font-size:24px;line-height:1.2;font-weight:500}.label--font-patrick{font-size:20px;line-height:1.3;font-weight:400}.label--font-mshan{font-size:22px;line-height:1.3;font-weight:400}.label--font-longcang{font-size:24px;line-height:1.2;font-weight:400}.element--font-caveat{font-size:22px;line-height:1.2;font-weight:500}.element--font-kalam{font-size:18px;line-height:1.3;font-weight:400}.element--font-dancing{font-size:20px;line-height:1.2;font-weight:500}.element--font-patrick{font-size:18px;line-height:1.3;font-weight:400}.element--font-mshan{font-size:19px;line-height:1.3;font-weight:400}.element--font-longcang{font-size:21px;line-height:1.2;font-weight:400}.result--font-caveat{font-size:24px;line-height:1.2;font-weight:500}.result--font-kalam{font-size:20px;line-height:1.3;font-weight:500}.result--font-dancing{font-size:22px;line-height:1.2;font-weight:500}.result--font-patrick{font-size:20px;line-height:1.3;font-weight:500}.result--font-mshan{font-size:21px;line-height:1.3;font-weight:500}.result--font-longcang{font-size:23px;line-height:1.2;font-weight:500}.label--selected{border-color:#b08968;background:#fff8e7;box-shadow:0 2px 6px #b0896826}.label--empty{min-width:18px;min-height:24px}.label--cursor:after{content:"";display:inline-block;width:1.5px;height:18px;background:#b08968;margin-left:2px;vertical-align:middle;animation:blink 1s steps(2,end) infinite}.label--input{background:transparent;border:1.5px dashed #b08968;outline:none;padding:6px 10px;font-family:inherit;border-radius:4px;cursor:text;box-sizing:content-box;-webkit-user-select:text;user-select:text;white-space:pre;min-width:24px;max-width:480px;line-height:1.4;color:inherit}.toolbar{position:fixed;background:linear-gradient(180deg,#fff,#fbfaf6);border:1px solid rgba(0,0,0,.06);border-radius:14px;box-shadow:0 1px 2px #0000000a,0 6px 20px #00000012;padding:5px;display:flex;gap:2px;z-index:100}.toolbar--top-horizontal{top:16px;left:50%;transform:translate(-50%);flex-direction:row}.toolbar--right-vertical{right:16px;top:50%;transform:translateY(-50%);flex-direction:column}.toolbar--left-vertical{left:16px;top:50%;transform:translateY(-50%);flex-direction:column}.toolbar button{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid transparent;padding:7px 12px;font-size:13px;font-weight:500;letter-spacing:.01em;line-height:1;border-radius:9px;cursor:pointer;color:#2a2a2a;font-family:inherit;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:background-color .15s ease,color .15s ease,box-shadow .15s ease,transform .1s ease}.toolbar__icon{flex-shrink:0;opacity:.78;transition:opacity .15s ease}.toolbar button:hover:not(:disabled){background:#0000000d}.toolbar button:hover:not(:disabled) .toolbar__icon{opacity:1}.toolbar button:active:not(:disabled){background:#00000017;transform:scale(.97)}.toolbar button:disabled{opacity:.35;cursor:not-allowed}.toolbar button:disabled .toolbar__icon{opacity:.55}.toolbar select{background:transparent;border:none;padding:6px 8px;font-size:13px;border-radius:8px;cursor:pointer;color:#2a2a2a;font-family:inherit;white-space:nowrap;max-width:180px}.toolbar select:hover{background:#f0efe8}.font-bar{position:fixed;right:16px;top:50%;transform:translateY(-50%);z-index:110;display:flex;flex-direction:column;gap:6px;padding:8px;background:#fff;border:1px solid #d8d8d2;border-radius:16px;box-shadow:0 6px 20px #0000001f;font-family:Georgia,Songti SC,STSong,"Source Han Serif SC",serif;transition:opacity .12s ease}.font-bar__group{display:flex;flex-direction:column;gap:4px;align-items:center}.font-bar__divider{width:28px;height:1px;background:#e5e4dd;margin:2px 0}.font-bar__btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:transparent;border:1.5px solid transparent;border-radius:10px;cursor:pointer;color:#2a2a2a;font-size:20px;line-height:1;transition:background .1s,color .1s,border-color .1s}.font-bar__btn:hover{background:#f0efe8}.font-bar__btn.is-active{background:#2563eb;color:#fff;border-color:#1d4ed8}.font-bar__btn.is-active:hover{background:#1d4ed8}.font-bar__btn--standard{font-weight:600}.font-bar__btn--caveat{font-size:26px;font-weight:700}.font-bar__btn--kalam{font-size:20px;font-weight:400}.font-bar__btn--dancing{font-size:26px;font-weight:700}.font-bar__btn--patrick{font-size:22px;font-weight:400}.font-bar__btn--mshan{font-size:26px;font-weight:400}.font-bar__btn--longcang{font-size:28px;font-weight:400}.font-bar__step{width:40px;height:26px;display:flex;align-items:center;justify-content:center;background:transparent;border:1.5px solid #e5e4dd;border-radius:8px;cursor:pointer;color:#2a2a2a;font-size:18px;line-height:1;padding:0;transition:background .1s,border-color .1s,color .1s}.font-bar__step:hover{background:#f0efe8;border-color:#c8c7bf}.font-bar__step:active{background:#e5e4dd}.font-bar__size{width:40px;height:28px;display:flex;align-items:center;justify-content:center;background:#f5f4ed;border:1.5px solid #e5e4dd;border-radius:8px;cursor:pointer;color:#2a2a2a;font-family:JetBrains Mono,SF Mono,Menlo,Consolas,monospace;font-size:13px;font-weight:600;line-height:1;padding:0;transition:background .1s,border-color .1s,color .1s}.font-bar__size:hover{background:#ece9dd;border-color:#c8c7bf}.toolbar button:hover{background:#f0efe8}.toolbar button:disabled{opacity:.4;cursor:not-allowed}.toolbar-toggle.is-active{background:#2563eb;color:#fff;font-weight:600;box-shadow:inset 0 1px #ffffff1f,0 1px 2px #2563eb59}.toolbar-toggle.is-active:hover{background:#1d4ed8}.toolbar-toggle.is-active:active:not(:disabled){background:#1e40af}.toolbar-toggle.is-active .toolbar__icon{opacity:1}.toolbar-divider{width:1px;background:#00000014;align-self:stretch;margin:6px 3px}.toolbar--right-vertical .toolbar-divider,.toolbar--left-vertical .toolbar-divider{width:auto;height:1px;margin:3px 6px}.insert-indicator{position:absolute;width:3px;background:#2563eb;border-radius:2px;pointer-events:none;z-index:50;box-shadow:0 0 0 1px #2563eb40}.insert-indicator--h{height:36px}.marquee{position:absolute;pointer-events:none;z-index:45;background:#2563eb1a;border:1.5px solid #2563eb;border-radius:4px;box-shadow:0 0 0 1px #2563eb26}.snap-highlight{position:absolute;pointer-events:none;z-index:40;border:2px dashed #2563eb;border-radius:14px;background:#2563eb0f;box-shadow:0 0 0 4px #2563eb0d;animation:snap-pulse .9s ease-in-out infinite}@keyframes snap-pulse{0%,to{opacity:.85}50%{opacity:.55}}.drag-ghost{position:absolute;pointer-events:none;z-index:1000;opacity:.85;transform:translate(-50%,-50%)}.connections{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:10}.connection-path{fill:none;stroke-width:2;opacity:.7}.hint{position:fixed;bottom:12px;left:50%;transform:translate(-50%);padding:4px 12px;font-size:12px;color:#8a8a85;background:#ffffffb3;border-radius:12px;pointer-events:none;z-index:90}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;width:100%;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none}body{background:#fafaf7;color:#2a2a2a}input,textarea{-webkit-user-select:text;user-select:text}
