*{box-sizing:border-box}html,body,#app{width:100%;height:100%;padding:0;margin:0;font-family:Pretendard,Pretendard Variable,sans-serif;position:absolute;left:0;top:0;background-color:#f4f6f8}button,input{font-family:Pretendard,Pretendard Variable,sans-serif}::-webkit-scrollbar{width:12px;height:12px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#00000029;border-radius:6px;border:4px solid white}::-webkit-scrollbar-thumb:hover{background:#00000052}.input.spinner_none{-moz-appearance:textfield}.input.spinner_none::-webkit-outer-spin-button,.input.spinner_none::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.background-thumbnail-modal{display:none}.properties-modal-overlay{position:fixed;z-index:999;display:flex;justify-content:center;align-items:flex-end;left:80px;bottom:30px;outline:none}.properties-modal{border-radius:12px;box-shadow:0 8px 32px #0000004d;max-width:220px;max-height:80vh;min-width:100px;overflow:hidden;display:flex;flex-direction:column;transition:box-shadow .2s ease}.properties-modal.dragging{box-shadow:0 12px 48px #00000080;transform:scale(1.02)}.properties-modal-header{padding:5px 10px 5px 0;display:flex;justify-content:center;align-items:center;background-color:#2e2f33;-webkit-user-select:none;user-select:none;cursor:grab}.properties-modal-header:active{cursor:grabbing}.properties-modal-title{color:#fff;font-size:9pt;font-weight:700;margin:0}.properties-modal-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 20px;background-color:#fff}.properties-modal-element-title{color:#000;margin:10px 0;font-size:12pt}.properties-modal-element-info{color:#fff;margin-bottom:20px;font-size:9pt}.properties-modal-element-summary{padding:10px;background-color:#ffffff1a;border-radius:4px;font-size:9pt}.properties-modal-element-editor{border-top:1px solid #1ca6fc;padding:15px 0}.properties-modal-no-selection{color:#fff;text-align:center;font-size:9pt}.properties-modal-no-selection-subtitle{font-size:9pt;opacity:.7}.toolbar{background-color:#fff;padding:10px;display:flex;flex-direction:column;align-items:center;gap:8px;flex-wrap:nowrap;justify-content:flex-start;height:100%;border-right:1px solid #999}.toolbar-hidden-input{display:none}.toolbar-button{width:30px;height:30px;display:flex;align-items:center;justify-content:center;margin-bottom:5px;font-size:25px;position:relative;cursor:pointer}.toolbar-button-icon{color:#666;transition:color .2s ease}.toolbar-button-icon.active{color:#0096fd}.toolbar-button-tooltip{position:absolute;width:140px;color:#fff;background:#000;height:30px;line-height:30px;text-align:center;visibility:visible;border-radius:6px;opacity:.8;left:100%;top:50%;margin-top:-15px;margin-left:15px;z-index:1001;font-size:12px}.toolbar-button-tooltip-pin{position:absolute;top:50%;right:100%;margin-top:-8px;width:0;height:0;border-right:8px solid #000000;border-top:8px solid transparent;border-bottom:8px solid transparent}.toolbar-button:has([data-icon=screenshot]){margin-top:auto;margin-bottom:0}.toolbar-screenshot-button{margin-top:auto;margin-bottom:0}.sidebar-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;z-index:1000;display:flex;justify-content:flex-end;align-items:flex-start;padding-top:20px;padding-right:20px}.sidebar-modal{background-color:#28292d;border-radius:12px;box-shadow:0 8px 32px #0000004d;max-width:450px;max-height:85vh;width:400px;overflow:hidden;display:flex;flex-direction:column}.sidebar-modal-header{padding:15px 20px;border-bottom:1px solid #1ca6fc;display:flex;justify-content:space-between;align-items:center;background-color:#1e1f23}.sidebar-modal-title{color:#fff;font-size:16px;font-weight:700;margin:0}.sidebar-modal-close{background:transparent;border:none;color:#fff;font-size:24px;cursor:pointer;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:background-color .2s}.sidebar-modal-close:hover{background-color:#ffffff1a}.sidebar-modal-close:active{background-color:#fff3}.sidebar-modal-content{flex:1;overflow-y:auto;overflow-x:hidden;padding-bottom:20px}.properties-fab{position:fixed;bottom:30px;right:30px;width:40px;height:40px;background-color:#2e2f33;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 4px 12px #0000004d;transition:all .3s cubic-bezier(.4,0,.2,1);z-index:1001;-webkit-user-select:none;user-select:none}.properties-fab:hover{background-color:#3a3b3f;box-shadow:0 6px 16px #0006;transform:translateY(-2px)}.properties-fab:active{transform:translateY(0);box-shadow:0 2px 8px #0000004d}.properties-fab.has-selection{background-color:#1ca6fc;animation:fab-selection-pulse 2s infinite}.properties-fab.has-selection:hover{background-color:#0d8ce8}.properties-fab-icon{width:20px;height:20px;filter:brightness(0) invert(1);transition:transform .2s ease}.properties-fab:hover .properties-fab-icon{transform:scale(1.1)}.properties-fab-pulse{position:absolute;top:-4px;left:-4px;right:-4px;bottom:-4px;border:2px solid #1ca6fc;border-radius:50%;animation:fab-pulse-ring 2s infinite;pointer-events:none}@keyframes fab-selection-pulse{0%,to{box-shadow:0 4px 12px #0000004d,0 0 #1ca6fcb3}50%{box-shadow:0 4px 12px #0000004d,0 0 0 8px #1ca6fc00}}@keyframes fab-pulse-ring{0%{transform:scale(.8);opacity:1}to{transform:scale(1.2);opacity:0}}@media (max-width: 768px){.properties-fab{bottom:20px;right:20px;width:48px;height:48px}.properties-fab-icon{width:24px;height:24px}}.properties-panel{position:fixed;top:0;right:0;width:250px;height:100vh;background-color:#fff;box-shadow:-4px 0 20px #0000004d;z-index:1002;display:flex;flex-direction:column;transform:translate(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);outline:none}.properties-panel.open{transform:translate(0)}.properties-panel.closed{transform:translate(100%)}.properties-panel-footer{flex:1;padding:0;display:flex;justify-content:center;align-items:flex-start;-webkit-user-select:none;user-select:none}.properties-panel-close{background-color:#2e2f33;border:none;color:#fff;font-size:9pt;cursor:pointer;padding:5px 15px;border-radius:6px;transition:all .2s ease;min-width:80px}.properties-panel-close:hover{background-color:#3a3b3f;transform:translateY(-1px);box-shadow:0 2px 8px #0003}.properties-panel-close:active{background-color:#1a1b1f;transform:translateY(0);box-shadow:0 1px 4px #0003}.properties-panel-content{flex:0 0 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:20px;background-color:#fff}.properties-panel-element-title{color:#000;margin:0 0 15px;font-size:12pt;font-weight:600;padding-bottom:10px;border-bottom:2px solid #1ca6fc}.properties-panel-element-editor{border-top:1px solid #e0e0e0;padding-top:15px}.properties-panel-no-selection{color:#666;text-align:center;font-size:11pt;padding:40px 20px;font-style:italic}.element-editor-attr-prop-separator{position:relative;height:2.5em;border-top:1px solid #1ca6fc;margin-top:10px}.element-editor-head-action{position:absolute;right:.5em;top:.5em}.element-editor-icon-head{float:right;margin:0 0 0 10px;padding:0;cursor:pointer;font-size:16pt}.property-table{width:100%;border-spacing:2px 0;margin-bottom:2px}.property-first-td{width:6em;text-transform:capitalize;font-size:9pt}.item-attributes-table{width:100%}.item-attributes-first-td{width:6em;font-size:9pt}.item-attributes-input{text-align:left;font-size:9pt}.property-checkbox-input{margin:0}.property-length-second-td{padding:0}.property-length-internal-table{border-collapse:collapse}.property-length-internal-table>tbody>tr>td:first-child{width:50%}.property-length-unit-container{width:5em}.line-attributes-table{width:100%;border-collapse:collapse;margin-bottom:10px}.line-attributes-first-td{width:6em;color:#000;font-size:9pt;font-weight:500;padding:4px 8px;vertical-align:middle}.line-attributes-input{width:100%;padding:4px 8px;border:1px solid #ddd;border-radius:4px;font-size:9pt;background-color:#fff;color:#000}.line-attributes-input:focus{outline:none;border-color:#1ca6fc;box-shadow:0 0 0 2px #1ca6fc33}.hole-attributes-container{display:flex;flex-direction:column;gap:10px}.hole-attributes-property{margin-bottom:8px}@media (max-width: 768px){.properties-panel{width:100vw}.properties-panel-footer{padding-top:12px}.properties-panel-content{padding:16px}}.properties-panel-content::-webkit-scrollbar{width:6px}.properties-panel-content::-webkit-scrollbar-track{background:#f1f1f1}.properties-panel-content::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.properties-panel-content::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.pdf-upload-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.pdf-upload-modal{background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;width:90%;max-width:500px;max-height:90vh;overflow-y:auto}.pdf-upload-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #e0e0e0}.pdf-upload-modal-title{margin:0;font-size:18px;font-weight:600;color:#333}.pdf-upload-modal-close{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background-color .2s}.pdf-upload-modal-close:hover{background-color:#f5f5f5}.pdf-upload-modal-content{padding:24px}.pdf-upload-mode-selection,.pdf-upload-file-selection,.pdf-upload-cad-options,.pdf-upload-dwg-options{margin-bottom:24px}.pdf-upload-mode-selection h4,.pdf-upload-file-selection h4,.pdf-upload-cad-options h4,.pdf-upload-dwg-options h4{margin:0 0 12px;font-size:14px;font-weight:600;color:#333}.pdf-upload-mode-options{display:flex;flex-direction:column;gap:12px}.pdf-upload-mode-option{display:flex;align-items:flex-start;gap:12px;padding:12px;border:1px solid #e0e0e0;border-radius:6px;cursor:pointer;transition:border-color .2s,background-color .2s}.pdf-upload-mode-option:hover{border-color:#0096fd;background-color:#f8f9ff}.pdf-upload-mode-option-disabled{opacity:.6;cursor:not-allowed}.pdf-upload-mode-option-disabled:hover{border-color:#e0e0e0;background-color:transparent}.pdf-upload-mode-option input[type=radio]{margin:2px 0 0}.pdf-upload-mode-label{display:flex;flex-direction:column;gap:4px}.pdf-upload-mode-label strong{font-size:14px;color:#333}.pdf-upload-mode-label small{font-size:12px;color:#666}.pdf-upload-file-input-wrapper{position:relative}.pdf-upload-file-input{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer}.pdf-upload-file-label{display:block;padding:12px 16px;border:2px dashed #ccc;border-radius:6px;text-align:center;cursor:pointer;transition:border-color .2s,background-color .2s;font-size:14px;color:#666}.pdf-upload-file-label:hover{border-color:#0096fd;background-color:#f8f9ff}.pdf-upload-option{display:flex;flex-direction:column;gap:4px;padding:12px;border:1px solid #e0e0e0;border-radius:6px;background-color:#f9f9f9}.pdf-upload-option label{display:flex;align-items:center;gap:8px;font-size:14px;color:#333;cursor:pointer}.pdf-upload-option small{font-size:12px;color:#666;margin-left:24px}.pdf-upload-text-input{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px;margin-top:8px;box-sizing:border-box}.pdf-upload-text-input:focus{outline:none;border-color:#0096fd;box-shadow:0 0 0 2px #0096fd33}.pdf-upload-error{padding:12px 16px;background-color:#fee;border:1px solid #fcc;border-radius:6px;color:#c33;font-size:14px;margin-bottom:16px}.pdf-upload-progress{margin-bottom:16px}.pdf-upload-progress-bar{width:100%;height:8px;background-color:#e0e0e0;border-radius:4px;overflow:hidden;margin-bottom:8px}.pdf-upload-progress-fill{height:100%;background-color:#0096fd;transition:width .3s ease}.pdf-upload-progress-text{font-size:12px;color:#666;text-align:center;display:block}.pdf-upload-modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:24px;padding-top:20px;border-top:1px solid #e0e0e0}.pdf-upload-cancel-btn,.pdf-upload-upload-btn{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:none}.pdf-upload-cancel-btn{background-color:#f5f5f5;color:#666}.pdf-upload-cancel-btn:hover:not(:disabled){background-color:#e0e0e0}.pdf-upload-upload-btn{background-color:#0096fd;color:#fff}.pdf-upload-upload-btn:hover:not(:disabled){background-color:#0080d6}.pdf-upload-upload-btn:disabled,.pdf-upload-cancel-btn:disabled{opacity:.6;cursor:not-allowed}.pdf-upload-logs{margin-bottom:16px;border:1px solid #e0e0e0;border-radius:6px;background-color:#f9f9f9}.pdf-upload-logs-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #e0e0e0;background-color:#f5f5f5}.pdf-upload-logs-header h4{margin:0;font-size:14px;font-weight:600;color:#333}.pdf-upload-logs-controls{display:flex;align-items:center;gap:12px}.pdf-upload-socket-status{font-size:12px;font-weight:500;padding:4px 8px;border-radius:4px}.pdf-upload-socket-status.connected{background-color:#d4edda;color:#155724}.pdf-upload-socket-status.disconnected{background-color:#f8d7da;color:#721c24}.pdf-upload-clear-logs-btn{padding:4px 8px;font-size:12px;background-color:#6c757d;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s}.pdf-upload-clear-logs-btn:hover{background-color:#5a6268}.pdf-upload-logs-container{max-height:200px;overflow-y:auto;padding:8px;font-family:Courier New,monospace;font-size:12px;line-height:1.4}.pdf-upload-log-empty{color:#666;font-style:italic;text-align:center;padding:20px}.pdf-upload-log-entry{margin-bottom:4px;padding:2px 0;word-wrap:break-word}.pdf-upload-log-timestamp{color:#666;margin-right:8px}.pdf-upload-log-message,.pdf-upload-log-info .pdf-upload-log-message{color:#333}.pdf-upload-log-success .pdf-upload-log-message{color:#155724;font-weight:500}.pdf-upload-log-error .pdf-upload-log-message{color:#721c24;font-weight:500}.pdf-upload-logs-container::-webkit-scrollbar{width:6px}.pdf-upload-logs-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.pdf-upload-logs-container::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.pdf-upload-logs-container::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.background-thumbnail-modal{position:fixed;left:var(--modal-left, 20px);top:var(--modal-top, 20px);z-index:999;background-color:#fff;border-radius:12px;padding:15px;box-shadow:0 8px 24px #0006;min-width:200px;min-height:150px;max-width:var(--modal-max-width, 320px);max-height:var(--modal-max-height, 320px)}.background-thumbnail-modal-image{max-width:var(--image-max-width, 290px);max-height:var(--image-max-height, 260px);object-fit:contain;display:block;border-radius:8px}.background-thumbnail-modal-close{position:absolute;top:8px;right:8px;color:#000;border:none;width:24px;height:24px;cursor:pointer;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;transition:background-color .2s;border-radius:4px;background-color:#fff}.background-thumbnail-modal-close:hover{color:#dc3545}.background-thumbnail-modal-close:active{color:#c82333}.quick-catalog-modal{position:absolute;bottom:30px;left:40px;background-color:#fffffff2;border:1px solid #a1a1a1;border-radius:12px;padding:4px;box-shadow:0 6px 20px #00000026;z-index:1000;display:none;flex-direction:column;align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);width:50px}.quick-catalog-item{display:flex;flex-direction:column;align-items:center;padding:8px 4px 6px;cursor:pointer;transition:all .3s ease;width:100%;border:1px solid transparent;background-color:#fffc}.quick-catalog-item:hover,.quick-catalog-item.hovered{transform:translateY(-2px)}.quick-catalog-item:hover .quick-catalog-item-icon,.quick-catalog-item.hovered .quick-catalog-item-icon,.quick-catalog-item:hover .quick-catalog-item-label,.quick-catalog-item.hovered .quick-catalog-item-label{color:#0096fd}.quick-catalog-item-icon{font-size:20px;color:#000;margin-bottom:4px;display:flex;align-items:center;justify-content:center}.quick-catalog-item-label{font-size:11px;color:#000;font-weight:600;text-align:center;letter-spacing:.3px}.react-tabs__tab-list{border-bottom:1px solid #aaa;margin:0 0 10px;padding:0}.react-tabs__tab{display:inline-block;border:1px solid transparent;border-bottom:none;bottom:-1px;position:relative;list-style:none;padding:6px 12px;cursor:pointer}.react-tabs__tab--selected,.react-tabs__tab:focus{border-color:#aaa;color:#1ca6fc;outline:none}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}
