:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Noto Sans KR",sans-serif;color:#25342e;background:#f5f6f4;font-synthesis:none;font-size:16px;--green:#245e45;--line:#e3e7e2;--muted:#738079}*{box-sizing:border-box}body{margin:0}button,a,input,select{touch-action:manipulation}button,a{ -webkit-tap-highlight-color:transparent}button,select{font:inherit}button,a{transition:background .18s,color .18s,box-shadow .18s}button{cursor:pointer}button:disabled{cursor:default;opacity:.45}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,#viewport:focus-visible{outline:3px solid #75a691;outline-offset:4px}a{color:inherit}button{color:inherit}button:disabled:hover{background:inherit}[hidden]{display:none!important}.topbar{height:78px;padding:0 38px;display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-size:25px;font-weight:700;letter-spacing:-1px}.brand-icon{display:inline-flex;background:var(--green);width:34px;height:36px;align-items:center;justify-content:center;border-radius:8px;color:white;font-size:27px;font-weight:500;position:relative}.brand-icon span{position:absolute;right:4px;bottom:-4px;color:#b5dcca;font-size:19px}.brand-sub{margin-left:13px;border-left:1px solid #dde3df;padding-left:20px;letter-spacing:1.5px;font-size:11px;color:#748078;font-weight:600}.top-end{display:flex;align-items:center;gap:18px;font-size:12px}.engine{display:flex;gap:8px;align-items:center;color:#52655b}.engine::before{content:"";width:6px;height:6px;background:#809086;border-radius:50%}.engine.ready::before{background:#438a61}.engine.offline{color:#a05b3e}.prototype{letter-spacing:1.3px;border:1px solid var(--line);padding:7px 10px;border-radius:5px;color:#7b857e;font-size:10px}.workspace-heading{display:flex;align-items:center;justify-content:space-between;padding:33px 38px 27px;gap:20px}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:600;color:#7c8880}h1{font-size:30px;font-weight:600;letter-spacing:-1.1px;margin:8px 0 0}.workspace-heading p{font-size:14px;line-height:1.7;color:#7a847d;margin:0}.workspace{display:grid;grid-template-columns:260px minmax(300px,1fr) 266px;margin:0 30px;min-height:650px;background:#fff;border:1px solid #dce2dc;border-radius:13px;overflow:hidden;box-shadow:0 8px 35px #23392c05}.panel{padding:25px 23px;min-width:0}.source-panel{border-right:1px solid var(--line)}.export-panel{border-left:1px solid var(--line)}.section-heading{display:flex;align-items:center;gap:10px;margin-bottom:25px}.step-no{font:11px ui-monospace,SFMono-Regular,monospace;color:#6b806f;display:grid;place-items:center;width:25px;height:25px;border:1px solid #e1e8e1;border-radius:50%}h2{font-size:15px;margin:0;font-weight:650;letter-spacing:-.4px}.dropzone{width:100%;border:1px dashed #b5c6b9;border-radius:9px;background:#f7faf7;display:flex;flex-direction:column;align-items:center;padding:23px 8px 20px}.dropzone:hover,.dropzone.dragover{background:#e9f3ec;border-color:var(--green)}.dropzone svg{width:41px;height:41px;margin-bottom:9px;color:#5f8770}.dropzone strong{font-size:14px}.dropzone span{color:#6e7d72;font-size:13px;margin-top:5px}.dropzone small{font-size:10px;margin-top:15px;color:#869087;letter-spacing:.3px}.field-help{font-size:12px;line-height:1.7;color:#879087;margin:12px 0 0}.divider{height:1px;background:var(--line);margin:24px 0}.option{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer}.option strong{font-size:13px;font-weight:600}.option small{display:block;font-size:11px;color:#849087;margin-top:5px}.option input{appearance:none;width:31px;min-width:31px;height:18px;border-radius:18px;background:#c7cec9;position:relative;margin:0;cursor:pointer}.option input:before{content:"";position:absolute;width:12px;height:12px;top:3px;left:3px;background:white;border-radius:50%;transition:transform .2s}.option input:checked{background:var(--green)}.option input:checked:before{transform:translateX(13px)}.sample-card{margin-top:29px;padding:18px 15px 14px;background:#f5f6f3;border-radius:8px}.sample-card .eyebrow{font-size:9px;letter-spacing:1.6px}.sample-card h3{font-size:15px;font-weight:600;margin:12px 0 7px}.sample-card p{font-size:12px;line-height:1.75;color:#7a857c;margin:0 0 15px}.secondary,.primary{border:1px solid #cad6ca;border-radius:5px;padding:10px 12px;font-size:13px;display:flex;align-items:center;justify-content:space-between;background:white;font-weight:600}.primary{background:var(--green);color:white;margin-top:10px;justify-content:center}.secondary:hover{background:#e8efe7}.full{width:100%}.text-link{font-size:11px;color:#758379;display:block;text-align:center;margin-top:12px;text-underline-offset:3px}.local-note{font-size:11px;color:#969e96;line-height:1.65;margin:20px 0 0}.source-file{display:flex;align-items:center;gap:9px;margin-top:18px;min-width:0}.file-icon{font:9px ui-monospace,monospace;background:#e9f0e8;padding:9px 5px;border-radius:4px;color:#43754e}.source-file div{min-width:0}.source-file strong{display:block;font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.source-file small{display:block;font-size:10px;color:#89948c;margin-top:5px}#board-picker{margin-top:16px;font-size:13px}#board-picker label{display:block;margin-bottom:6px}select{max-width:100%;width:100%;padding:8px;border:1px solid var(--line);background:white;border-radius:5px;font-size:13px}.viewer-panel{position:relative;min-width:0;min-height:650px;display:flex;flex-direction:column;background:#edf1ee}.viewer-top{position:absolute;z-index:2;top:24px;left:25px;right:25px;display:flex;justify-content:space-between;gap:15px;pointer-events:none}.view-label{font-size:10px;font-weight:600;letter-spacing:1.7px;color:#718176;display:flex;gap:7px;align-items:center;white-space:nowrap}.view-label span{width:5px;height:5px;border-radius:50%;border:1px solid #849888}.model-label{font:11px ui-monospace,SFMono-Regular,monospace;color:#8a958d;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#viewport{position:absolute;inset:0;outline-offset:-4px;touch-action:none}#viewport canvas{width:100%;height:100%;display:block}.empty,.loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;pointer-events:none;z-index:3}.empty-mark{font-size:52px;font-weight:200;color:#a0b3a5;margin-bottom:20px}.empty h2{font-size:21px;font-weight:500;color:#708276}.empty p{font-size:13px;line-height:1.8;color:#8a998e}.loading{background:#edf1eef0;backdrop-filter:blur(5px)}.loading strong{font-size:17px;font-weight:500;margin:24px 0 11px}.loading span{font-size:13px;color:#6b7d70}.loading small{font-size:11px;color:#98a299;margin-top:15px}.spinner{width:35px;height:35px;border:2px solid #d1ded2;border-top-color:var(--green);border-radius:50%;animation:spin 1.2s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.viewer-tools{position:absolute;bottom:66px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:3px;padding:5px;background:#ffffffed;border:1px solid #dfe5de;box-shadow:0 4px 15px #314d3610;border-radius:8px;z-index:4;white-space:nowrap}.viewer-tools button{background:transparent;border:0;padding:9px 12px;border-radius:5px;font-size:12px;color:#6b7970}.viewer-tools button.active,.viewer-tools button[aria-pressed=true]{background:#e9f0e9;color:#285c3d}.viewer-tools button:hover:enabled{background:#f1f4ef}.viewer-tools>span{height:17px;border-right:1px solid var(--line);margin:0 3px}.viewer-bottom{position:absolute;bottom:24px;left:25px;right:25px;display:flex;justify-content:space-between;gap:10px;font-size:10px;color:#8d998f;pointer-events:none}.viewer-error{position:absolute;top:75px;left:25px;right:25px;background:#fff5ec;border:1px solid #ead0b6;color:#8f5631;font-size:13px;line-height:1.6;padding:15px;border-radius:6px;z-index:5}.status-card{display:flex;align-items:center;gap:10px;padding:14px 12px;background:#f5f7f3;border-radius:7px}.status-icon{color:#76937d;font-size:20px}.status-card strong{display:block;font-size:13px;font-weight:600}.status-card small{display:block;font-size:11px;color:#839086;margin-top:6px;line-height:1.6}.status-card.error{background:#fcf0e9}.status-card.error .status-icon{color:#b0714a}.metadata{margin:22px 0 0}.metadata div{display:flex;justify-content:space-between;gap:10px;margin-top:14px;font-size:12px}.metadata dt{color:#879087}.metadata dd{margin:0;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;text-align:right;color:#526454}.export-caption{font-size:11px;color:#92998f;margin:0 0 12px}.export-link{display:flex;align-items:center;justify-content:space-between;padding:16px 13px;border:1px solid #d7e1d4;border-radius:8px;text-decoration:none;margin:10px 0;background:#fff}.export-link:not(.disabled):hover{background:#eef5ec;border-color:#799e77}.export-link strong{font-size:17px;letter-spacing:-.3px;font-weight:600}.export-link strong span{font-size:8px;font-weight:500;letter-spacing:.8px;background:#f1f4ef;color:#788871;padding:4px 5px;margin-left:6px;vertical-align:middle;border-radius:3px}.export-link small{display:block;font-size:10px;color:#8b9588;margin:7px 0 9px}.export-link em{font-size:10px;color:#668a5a;font-style:normal;font-family:ui-monospace,monospace}.download-icon{font-size:22px;color:#6e8d61;font-weight:300}.export-link.disabled{opacity:.48;cursor:default}.notice{margin-top:20px;padding:13px;background:#fbf7ec;border:1px solid #ece4cf;border-radius:6px;color:#907745;font-size:11px;line-height:1.7}.notice strong{font-weight:600}.notice ul{margin:7px 0 0;padding-left:14px}.notice li+li{margin-top:5px}details{margin-top:16px;font-size:11px;color:#85907f}summary{cursor:pointer}pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:230px;overflow:auto;font-size:10px;line-height:1.5;background:#f2f4ef;padding:10px;border-radius:5px}.scope-note{margin-top:28px}.scope-note>span{font-size:11px;color:#71836b}.scope-note p{font-size:11px;color:#9aa194;line-height:1.7;margin:7px 0 0}footer{padding:23px 38px;display:flex;justify-content:space-between;font-size:10px;color:#8f998d;letter-spacing:.6px}.footer-slash{color:#bac1b7;padding:0 12px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
@media(min-width:1500px){.workspace{min-height:720px;grid-template-columns:285px minmax(400px,1fr) 285px}.viewer-panel{min-height:720px}.panel{padding:28px}.workspace-heading{padding-top:40px;padding-bottom:34px}}
@media(max-width:1150px){.workspace{grid-template-columns:230px minmax(290px,1fr) 230px;margin:0 20px}.panel{padding:22px 17px}.viewer-tools button{padding:9px 8px}.viewer-top,.viewer-bottom{left:18px;right:18px}.viewer-bottom{font-size:9px}.model-label{max-width:110px}.topbar{padding:0 25px}.workspace-heading{padding-left:25px;padding-right:25px}}
@media(max-width:950px){.workspace{grid-template-columns:230px minmax(0,1fr)}.viewer-panel{min-height:600px}.export-panel{grid-column:1/-1;border-left:0;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:15px 25px}.export-panel .section-heading{grid-column:1/-1;margin-bottom:0}.export-panel .divider,.export-caption{display:none}.metadata{margin:0}.metadata div:first-child{margin-top:0}.export-link{margin:0}.scope-note{margin-top:0}.notice,details{margin-top:0}.brand-sub{display:none}.workspace-heading p{font-size:12px}.viewer-bottom{font-size:10px}}
@media(max-width:620px){.topbar{height:64px;padding:0 18px}.brand{font-size:22px}.top-end{gap:0}.prototype{display:none}.engine{font-size:10px}.workspace-heading{padding:25px 19px 22px}.workspace-heading p{display:none}h1{font-size:26px}.workspace{display:flex;flex-direction:column;margin:0 12px;overflow:hidden}.source-panel{border-right:0;order:0;display:grid;grid-template-columns:1fr 1fr;gap:13px;padding:19px}.source-panel .section-heading{grid-column:1/-1;margin:0}.dropzone{padding:15px 5px;grid-column:1/-1}.dropzone svg{width:30px;height:30px;margin-bottom:3px}.dropzone small{margin-top:9px}.source-panel>.field-help:first-of-type{grid-column:1/-1;margin:0}.source-panel .divider{display:none}.source-panel .option{grid-column:1/-1}.source-panel .option+.field-help{display:none}.sample-card{grid-column:1/-1;margin:0;padding:12px;display:flex;align-items:center;gap:10px}.sample-card .eyebrow,.sample-card p,.sample-card .text-link{display:none}.sample-card h3{font-size:12px;margin:0;white-space:nowrap}.sample-card .secondary{font-size:12px;padding:8px}.local-note{grid-column:1/-1;margin:0;font-size:10px}.local-note br{display:none}.source-file{grid-column:1/-1;margin:0}#board-picker{grid-column:1/-1;margin:0}.viewer-panel{order:1;min-height:430px;border-top:1px solid var(--line)}.export-panel{order:2;padding:22px 19px;gap:18px}.viewer-top{top:20px}.viewer-tools{bottom:54px}.viewer-tools button{padding:9px 10px}.viewer-bottom{bottom:18px;font-size:9px}.viewer-bottom #geometry-info{display:none}.export-link{padding:12px 10px}.export-link strong{font-size:16px}.export-link strong span{font-size:7px;margin-left:3px}.export-link small{font-size:9px}.notice,details,.scope-note{grid-column:1/-1}footer{padding:20px 18px;font-size:8px}footer>span:last-child{display:none}}
.model-info{margin-top:18px;padding:13px;border:1px solid #c9dfcf;border-radius:6px;background:#eff7f0;color:#305e40;font-size:13px;line-height:1.7;grid-column:1/-1;overflow-wrap:anywhere}
@media(prefers-reduced-motion:reduce){*{transition:none!important}.spinner{animation-duration:2.5s}}

/* Model provenance and reversible substitutions. */
.parts-summary{border-top:1px solid #dbe2db;padding:20px 0 0;margin-top:20px}.parts-summary p{font-size:12px;line-height:1.7;color:#657268}
#part-markers{position:absolute;inset:0;pointer-events:none;overflow:hidden} .part-marker{position:absolute;left:0;top:0;transform:translate(-50%,-100%);pointer-events:auto;border:1px solid #9caea3;background:#f9fffae8;color:#335746;border-radius:5px;padding:3px 6px;font:600 10px sans-serif;cursor:pointer;box-shadow:0 2px 5px #0001;white-space:nowrap}.part-marker.auto{background:#fff0c9;border-color:#c49a39;color:#795100}.part-marker.manual{background:#e8e5ff;border-color:#9e8ad6;color:#604696}.part-marker.missing,.part-marker.none,.part-marker.removed{background:#fff2e9;border:1px dashed #cb763c;color:#99501b;font-size:12px}.part-marker:hover{z-index:2;outline:2px solid #406958}
#model-legend{position:absolute;top:52px;left:14px;right:14px;display:flex;gap:10px;flex-wrap:wrap;align-items:center;font-size:10px;color:#466354;pointer-events:none}#model-legend span:nth-child(2){color:#926000}#model-legend span:nth-child(3){color:#7052a7}#model-legend span:nth-child(4){color:#a35c28}#model-legend label{margin-left:auto;pointer-events:auto;display:flex;align-items:center;gap:3px}
#model-dialog{width:min(920px,94vw);max-height:90vh;border:1px solid #d3dfd6;border-radius:16px;padding:24px;color:#263c30;background:#fafcf9;box-shadow:0 25px 100px #152d3550}#model-dialog::backdrop{background:#18382c55;backdrop-filter:blur(3px)}.dialog-heading{display:flex;justify-content:space-between;gap:16px;align-items:center}.dialog-heading h2{margin:5px 0 0;font-size:23px}.model-disclaimer{background:#fff3db;border-radius:8px;padding:12px;font-size:12px;line-height:1.7;color:#785927}.model-editor{display:grid;grid-template-columns:190px minmax(0,1fr);gap:24px}#parts-list{max-height:56vh;overflow:auto;border-right:1px solid #dae2da;padding-right:12px}#parts-list button{display:block;width:100%;text-align:left;border:1px solid transparent;border-radius:7px;background:transparent;padding:10px;margin-bottom:3px;cursor:pointer;color:#395243}#parts-list button[aria-current=true]{background:#e7eee7;border-color:#aec3b2}#parts-list small{display:block;margin-top:4px;font-size:11px}.part-inspector{max-height:56vh;overflow:auto;padding-right:5px}.part-inspector h3{margin:0 0 10px;font-size:20px}.provenance{display:inline-block;padding:5px 8px;border-radius:5px;background:#e6ede7;font-size:12px}.provenance.auto{background:#fff0c9}.provenance.manual{background:#e8e5ff}.provenance.missing,.provenance.none,.provenance.removed{background:#ffe6d6}#part-description{font-size:12px;line-height:1.7}.part-paths{font-size:11px;line-height:1.6}.part-paths dt{color:#76857a;margin-top:7px}.part-paths dd{margin:0;overflow-wrap:anywhere}.model-actions{display:flex;gap:8px;margin:16px 0}.part-inspector label{display:block;font-size:13px;margin:16px 0 8px}#model-search{box-sizing:border-box;width:100%;padding:10px;border:1px solid #b9cbbf;border-radius:6px;background:white;color:#243b2e}#candidate-list{display:grid;gap:7px}#candidate-list button{display:flex;justify-content:space-between;gap:12px;text-align:left;background:white;border:1px solid #d8e3da;border-radius:7px;padding:11px;cursor:pointer;overflow-wrap:anywhere;font-size:12px;color:#344d3d}#candidate-list button:hover{border-color:#547e61;background:#edf5ec}#candidate-list button span{min-width:0}#candidate-list button small{display:block;color:#819082;font-size:10px;margin-top:5px}#candidate-list button b{flex-shrink:0;color:#527550}#model-edit-error{color:#ae432e;font-size:12px}button:disabled{cursor:wait;opacity:.5}
@media(max-width:620px){#model-dialog{padding:16px}.model-editor{grid-template-columns:1fr;gap:12px}#parts-list{max-height:105px;border-right:0;border-bottom:1px solid #dbe2db;display:flex;gap:5px;overflow:auto}#parts-list button{min-width:105px;width:auto}.part-inspector{max-height:48vh}#model-legend{gap:7px;font-size:9px}.model-actions{flex-wrap:wrap}}

@media(min-width:621px){.viewer-panel{position:sticky;top:16px;height:650px;align-self:start}}
