:root{--bg:#f4f6f9;--panel:#fff;--line:#d9dee6;--text:#1c2330;--muted:#6a7486;--accent:#2f6fe4;--warn:#c76a00;--bad:#d0263c;--ok:#1d8a4e;color:var(--text);background:var(--bg);word-break:keep-all;font-family:Pretendard,Noto Sans KR,system-ui,-apple-system,sans-serif;font-size:14px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button{font:inherit;color:inherit}.muted{color:var(--muted)}.small{font-size:12px}.bad{color:var(--bad)}.spacer{flex:1}code,.path{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.btn{border:1px solid var(--line);background:var(--panel);cursor:pointer;white-space:nowrap;border-radius:6px;padding:5px 11px}a.btn{color:inherit;align-items:center;text-decoration:none;display:inline-flex}.btn:hover:not(:disabled){border-color:#aab3c2}.btn:disabled{opacity:.45;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:#245ccc}.btn-danger{color:var(--bad);border-color:#f0b6be}.btn-primary.btn-danger{background:var(--bad);color:#fff}.btn-ghost{background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){background:#e9edf3;border-color:#0000}.btn.on{color:#1d4fb3;background:#dfe8fb}.btn-dirty:after{content:"";vertical-align:middle;background:#ffcf4d;border-radius:50%;width:7px;height:7px;margin-left:6px;display:inline-block}.seg{border:1px solid var(--line);background:var(--bg);border-radius:8px;gap:2px;padding:2px;display:flex}.home{flex-direction:column;min-height:100%;display:flex}.home-drag{outline:3px dashed var(--accent);outline-offset:-10px}.home-head{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:10px clamp(12px,4vw,40px);display:flex}.brand{color:inherit;align-items:center;gap:8px;font-size:16px;font-weight:700;text-decoration:none;display:inline-flex}.home-main{width:min(760px,100%);margin:0 auto;padding:36px clamp(12px,4vw,24px) 48px}.home-main h1{margin:0 0 16px;font-size:26px}.home-main h2{margin:28px 0 10px;font-size:15px}.notice{color:#7a4b00;background:#fff6e6;border:1px solid #f1d39b;border-radius:8px;margin:0 0 14px;padding:10px 14px}.drop{text-align:center;background:var(--panel);cursor:pointer;border:2px dashed #b8c3d6;border-radius:14px;align-content:center;place-items:center;gap:8px;min-height:220px;padding:28px;transition:border-color .15s,background .15s;display:grid}.drop b{font-size:17px}.drop-ico{font-size:34px;line-height:1}.drop:hover,.home-drag .drop{border-color:var(--accent);background:#f3f7ff}.drop.busy-drop{opacity:.7;pointer-events:none}.drop input{display:none}.privacy{color:var(--muted);margin:12px 0 0}.examples{gap:8px;display:grid}.example{border:1px solid var(--line);background:var(--panel);color:inherit;border-radius:10px;gap:2px;padding:12px 14px;text-decoration:none;display:grid}.example:hover{border-color:var(--accent)}.example b{color:var(--accent)}.busy{color:#fff;z-index:20;pointer-events:none;background:#1c2330e0;border-radius:8px;padding:7px 14px;font-size:13px;position:fixed;top:56px;left:50%;transform:translate(-50%)}.editor{grid-template:"top top""parts view"1fr"bottom bottom"/250px 1fr;height:100%;display:grid;overflow:hidden}.ed-top{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;grid-area:top;align-items:center;gap:8px;padding:6px 10px;display:flex}.ed-name{font-size:15px}.ed-src{text-overflow:ellipsis;white-space:nowrap;max-width:30vw;font-size:12px;overflow:hidden}@media (max-width:1500px){.ed-src{display:none}}.ed-parts{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;grid-area:parts;min-height:0;display:flex}.parts-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;padding:8px 10px;display:flex}.parts-head .muted{font-size:11px}.ed-parts ul{flex:1;margin:0;padding:4px 0;list-style:none;overflow:auto}.part{align-items:center;gap:4px;padding:2px 6px 2px 10px;display:flex}.part:hover{background:#f1f4f9}.part.missing .part-name{color:var(--muted);text-decoration:line-through}.swatch{border-radius:3px;flex:none;width:12px;height:12px}.part-name{text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:default;background:0 0;border:0;flex:1;min-width:0;padding:4px 2px;overflow:hidden}.dirty-dot{vertical-align:middle;background:#f0a500;border-radius:50%;width:7px;height:7px;margin-left:5px;display:inline-block}.icon{cursor:pointer;width:24px;height:24px;color:var(--muted);opacity:.6;background:0 0;border:0;border-radius:5px}.icon.on{opacity:1;color:var(--text)}.icon:hover{opacity:1;background:#e3e8f0}.parts-foot{border-top:1px solid var(--line);padding:4px 6px}.ed-view{grid-area:view;min-width:0;min-height:0;position:relative;overflow:hidden}.viewport{position:absolute;inset:0}.cad-canvas{outline:none;width:100%;height:100%;display:block}.cad-labels{pointer-events:none;position:absolute;inset:0;overflow:hidden}.cad-label{color:#fff;white-space:nowrap;background:#1c2330d8;border-radius:5px;padding:2px 7px;font-size:12px;position:absolute;top:0;left:0}.cad-label-push{background:#ff7a1a}.cad-label-measure{background:#d6246e;font-weight:600}.panel{background:var(--panel);border:1px solid var(--line);z-index:5;border-radius:10px;width:300px;padding:10px 12px;position:absolute;top:12px;right:12px;box-shadow:0 6px 24px #1c233022}.panel-title{margin-bottom:8px;font-weight:600}.panel .field{align-items:center;gap:8px;margin:6px 0;display:flex}.panel .field input{border:1px solid var(--line);width:96px;font:inherit;text-align:right;border-radius:6px;padding:4px 6px}.panel p{margin:6px 0}.panel-actions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.measure{gap:3px;margin-top:8px;display:grid}.measure b{color:#b0124f}.hint{pointer-events:none;background:#ffffffc0;border-radius:6px;padding:2px 8px;position:absolute;bottom:8px;left:10px}.ed-bottom{background:var(--panel);border-top:1px solid var(--line);grid-area:bottom;align-items:center;min-width:0;display:flex}.ed-count{white-space:nowrap;padding:0 12px}.timeline{flex:1;align-items:center;gap:8px;min-width:0;padding:6px 8px;display:flex}.tl-tools{gap:0;display:flex}.tl-tools .btn{padding:4px 7px}.tl-row{background:var(--bg);border-radius:8px;flex:1;align-items:center;gap:4px;min-width:0;min-height:46px;padding:3px 4px;display:flex;overflow-x:auto}.tl-origin{white-space:nowrap;color:var(--muted);padding:0 6px;font-size:11px}.tl-empty{padding:0 8px;font-size:12px}.tl-chip{cursor:pointer;background:#fff;border:1px solid #c8d3e6;border-radius:7px;flex:none;grid-template-rows:auto auto;grid-template-columns:auto auto;align-items:center;column-gap:4px;padding:3px 8px;display:grid}.tl-chip .tl-icon{color:var(--accent);grid-row:span 2}.tl-text{font-size:12px;font-weight:600}.tl-part{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:110px;font-size:10px;overflow:hidden}.tl-chip.tl-after{opacity:.4}.tl-chip.tl-off .tl-text{text-decoration:line-through}.tl-chip.tl-approx{background:#fff9de;border-color:#e0b400}.tl-chip.tl-fail{border-color:var(--bad);background:#ffe9ec}.tl-chip.tl-fail .tl-icon,.tl-chip.tl-fail .tl-text{color:var(--bad)}.tl-chip.tl-hover{box-shadow:0 0 0 2px #00a6e055}.tl-chip.tl-editing{box-shadow:0 0 0 2px #ff7a1a}.tl-marker{cursor:ew-resize;background:#ff7a1a;border-radius:3px;flex:none;align-self:stretch;width:6px;position:relative}.tl-marker:before{content:"";position:absolute;inset:0 -7px}.tl-marker:focus-visible{outline:2px solid var(--accent)}.tl-pos{text-align:center;min-width:34px;font-size:12px}.dlg-back{z-index:100;background:#1c233066;place-items:center;display:grid;position:fixed;inset:0}.dlg{background:var(--panel);border-top:6px solid var(--accent);border-radius:12px;width:min(520px,100vw - 32px);padding:18px 20px 14px;box-shadow:0 16px 48px #0004}.dlg-error{border-top-color:var(--bad)}.dlg-warn{border-top-color:var(--warn)}.dlg-title{margin:0 0 10px;font-size:17px}.dlg-error .dlg-title{color:var(--bad)}.dlg-warn .dlg-title{color:#a24f00}.dlg-body{white-space:pre-wrap;word-break:break-word;line-height:1.55}.dlg-body p{margin:6px 0}.dlg-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:14px;display:flex}.toasts{z-index:90;pointer-events:none;gap:6px;display:grid;position:fixed;bottom:76px;left:50%;transform:translate(-50%)}.toast{color:#e8ffe9;background:#1d2a1f;border-radius:8px;padding:8px 16px;font-size:13px;box-shadow:0 6px 18px #0003}.hidden{display:none!important}.ed-tools{align-items:center;gap:8px;display:flex}.editor.parts-closed{grid-template-columns:0 1fr}.editor.parts-closed .ed-parts{display:none}.parts-head .icon{margin-left:6px}.op-panel{width:auto;padding:6px}.op-bar{align-items:center;gap:4px;display:flex}.op-title{white-space:nowrap;padding:0 4px;font-size:13px;font-weight:600}.sq{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:8px;min-width:34px;height:34px;font-size:16px;line-height:1}.sq:disabled{opacity:.4;cursor:default}.sq-ok{background:var(--accent);border-color:var(--accent);color:#fff}.op-value{font-variant-numeric:tabular-nums;cursor:pointer;background:#fff4ec;border:1px solid #ffb27a;border-radius:8px;min-width:92px;height:34px;font-weight:700}.op-value.bad{border-color:var(--bad);background:#ffe9ec}.op-pen{color:var(--muted);margin-left:2px;font-weight:400}.op-more{padding:6px 4px 2px}.op-fail{margin:6px 4px 0}.panel-info{padding-right:34px}.panel-x{position:absolute;top:4px;right:4px}.hint{pointer-events:auto;align-items:flex-start;gap:6px;max-width:calc(100% - 20px);display:flex}.hint-text{flex:1;min-width:0}.hint-x{min-width:28px;min-height:24px;color:var(--muted);cursor:pointer;background:0 0;border:0;flex:none;padding:0 2px}.editor.narrow{grid-template:"top""view"1fr"bottom"/minmax(0,1fr);height:100dvh}.narrow .ed-top{flex-wrap:nowrap;gap:2px;min-width:0;padding:4px 6px;position:relative}.narrow .ed-top .btn{flex:none;padding:6px 7px}.narrow .ed-top .seg{flex:none}.narrow .ed-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:14px;overflow:hidden}.narrow .ed-src,.narrow .ed-count,.narrow .tl-far,.narrow .tl-part{display:none}.ed-menu{z-index:30;background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-direction:column;align-items:stretch;padding:8px;position:absolute;top:calc(100% + 4px);right:6px;box-shadow:0 8px 24px #1c233033}.ed-menu .seg{grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.ed-menu .seg .btn{min-width:0;padding:8px 4px}.editor.narrow .ed-parts{z-index:25;width:min(300px,82vw);transition:transform .18s;display:flex;position:fixed;top:46px;bottom:0;left:0;box-shadow:6px 0 24px #1c233033}.editor.narrow .ed-parts.closed{box-shadow:none;transform:translate(-105%)}.narrow .part{padding:4px 6px 4px 12px}.narrow .icon{width:34px;height:34px;font-size:15px}.narrow .panel{width:auto;max-height:55%;inset:auto 8px 8px;overflow:auto}.narrow .op-bar{justify-content:space-between}.narrow .op-title{display:none}.narrow .op-value{flex:1}.narrow .hint{max-width:none;top:8px;bottom:auto;right:8px}.narrow .timeline{gap:4px;padding:4px}.narrow .tl-row{min-height:40px}.narrow .tl-chip{padding:3px 6px}.narrow .tl-tools .btn{padding:6px}.narrow .busy{top:50px}.narrow .toasts{width:calc(100vw - 24px);bottom:64px}.narrow .toast{text-align:center}body:has(.editor){overscroll-behavior:none;position:fixed;inset:0;overflow:hidden}.sel-title{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.narrow .op-title.sel-title{display:block}.sel-actions{flex-wrap:wrap;gap:6px;padding:6px 2px 0;display:flex}.op-panel .check{align-items:center;gap:6px;margin:6px 0 2px;font-size:13px;display:flex}.op-panel .check input{width:18px;height:18px}.panels{z-index:5;pointer-events:none;flex-direction:column;align-items:flex-end;gap:8px;max-height:calc(100% - 24px);display:flex;position:absolute;top:12px;right:12px;overflow:auto}.panels>.panel{pointer-events:auto;max-width:min(440px,100vw - 24px);position:relative;top:auto;right:auto}.narrow .panels{align-items:stretch;max-height:60%;inset:auto 8px 8px}.narrow .panels>.panel{max-height:none;position:relative;bottom:auto;left:auto;right:auto}.sq.on{border-color:var(--accent);color:var(--accent);background:#e6f0ff}.op-bar .seg{gap:2px;display:flex}.link{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.sketch-snap{color:#444;min-height:18px;padding:4px 4px 0}.shape-row{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding:4px 0;display:flex}.panel .field.mini{gap:4px;margin:0;font-size:12px}.panel .field.mini input{width:64px}.cad-label-snap{background:#ff7a1a;font-weight:600}.cad-label-snap.snap-center{background:#ff2d8a}.cad-label-snap.snap-align,.cad-label-snap.snap-origin{background:#7c3aed}.cad-label-snap.snap-edge{background:#00a6e0}.cad-label-snap .tab{opacity:.8;margin-left:4px;font-weight:400}.cad-label-dim{transform-origin:0;background:#1f6feb}.measure-axes{font-variant-numeric:tabular-nums;gap:10px;display:flex}.measure-axes .axis{cursor:default;border:1px solid #0000;border-radius:5px;padding:1px 6px}.measure-axes .axis:hover{border-color:currentColor}.axis-x{color:#c62f35}.axis-y{color:#237a45}.axis-z{color:#2f4fc0}.cad-label-axis.cad-label-x{background:#e5484d}.cad-label-axis.cad-label-y{background:#2f9e5b}.cad-label-axis.cad-label-z{background:#3e63dd}.part-pick{width:16px;height:16px;margin:0 2px 0 0}.part.picked{background:#eef5ff}.overlap-list{color:#b0124f;padding:6px 4px 0}.overlap-list .ok{color:#237a45}.section-more input[type=range]{width:100%}.section-more .seg{align-items:center;gap:4px;margin-top:4px;display:flex}.section-basis{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px;margin-top:4px;display:flex}.section-basis .seg{gap:2px;display:flex}.section-rot{grid-template-columns:auto 1fr 56px auto;align-items:center;gap:6px;margin-top:4px;font-size:12px;display:grid}.section-more .section-rot input[type=range]{width:auto;min-width:0}.section-rot input[type=number],.section-rot input:not([type]){width:56px}.op-slide{align-items:center;gap:6px;padding:4px 4px 0;display:flex}.op-slide input[type=range]{flex:1;min-width:0}
