*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Microsoft YaHei','Segoe UI',sans-serif;background:#0b0b18;color:#ddd;overflow:hidden;height:100vh;user-select:none}
#canvas-wrap{position:absolute;inset:0}
.ptitle{font-size:12px;font-weight:700;color:#40c4ff;letter-spacing:1.2px;text-transform:uppercase;border-bottom:1px solid #1e2040;padding-bottom:6px;margin-bottom:8px}
.shdr{font-size:11px;font-weight:600;color:#82b1ff;display:flex;align-items:center;gap:6px;margin-bottom:5px}
.shdr::after{content:'';flex:1;height:1px;background:#1e2040}
.row{display:flex;align-items:center;gap:6px;margin-bottom:5px}
.row label{font-size:10px;color:#888;width:92px;flex-shrink:0;line-height:1.2}
.row input[type=number]{flex:1;background:#111128;border:1px solid #2a2a50;color:#ddd;padding:3px 6px;border-radius:3px;font-size:11px;min-width:0}
.row input[type=number]:focus{outline:none;border-color:#40c4ff}
.row input[type=checkbox]{cursor:pointer;accent-color:#40c4ff}
.row .unit{font-size:10px;color:#444;flex-shrink:0}
.btn{border:none;border-radius:4px;cursor:pointer;font-size:11px;padding:6px 8px;transition:background .15s;font-family:inherit;width:100%;margin-bottom:4px}
.btn-p{background:#0d47a1;color:#fff}.btn-p:hover{background:#1565c0}
.btn-s{background:#1a1a2e;color:#82b1ff;border:1px solid #2a2a50}.btn-s:hover{background:#1e2040}
.btn-w{background:#1a2a1a;color:#69f0ae;border:1px solid #1a4a1a}.btn-w:hover{background:#1e3a1e}
.btn-r{background:#2a1a1a;color:#ff5252;border:1px solid #4a1a1a}.btn-r:hover{background:#3a1a1a}
.btn-sm{width:auto;padding:4px 10px;font-size:11px;flex-shrink:0}
#pl{position:absolute;top:0;left:0;width:300px;height:100%;background:rgba(8,8,20,.95);border-right:1px solid #1e2040;padding:10px;overflow-y:auto;z-index:20;display:flex;flex-direction:column;gap:9px}
#pr{position:absolute;top:0;right:0;width:205px;background:rgba(8,8,20,.95);border-left:1px solid #1e2040;padding:10px;z-index:20}
.srow{display:flex;justify-content:space-between;font-size:11px;margin-bottom:6px}
.sv{font-weight:700}.sv.g{color:#69f0ae}.sv.r{color:#ff5252}.sv.y{color:#ffd740}.sv.b{color:#40c4ff}
hr.div{border:none;border-top:1px solid #1e2040;margin:7px 0}
#tb{position:absolute;top:0;left:300px;right:205px;height:34px;background:rgba(8,8,20,.88);border-bottom:1px solid #1e2040;display:flex;align-items:center;padding:0 14px;z-index:20;gap:12px}
#tb .tmain{font-size:13px;font-weight:700;color:#40c4ff}
#tb .tsub{font-size:10px;color:#444}
#fps{margin-left:auto;font-size:10px;color:#333}
#mode-badge{font-size:11px;padding:2px 8px;border-radius:10px;background:#1a2a1a;color:#69f0ae;border:1px solid #1a4a1a;display:none}
#mode-badge.active{display:inline-block}
#loading{position:absolute;inset:0;background:rgba(4,4,12,.93);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:100;gap:12px}
.spin{width:34px;height:34px;border:3px solid #1a1a3e;border-top-color:#40c4ff;border-radius:50%;animation:sp .8s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
#ltxt{font-size:12px;color:#40c4ff;max-width:300px;text-align:center}
#lbar-w{width:220px;height:3px;background:#1a1a3e;border-radius:2px;overflow:hidden}
#lbar{height:100%;background:#40c4ff;width:0;transition:width .25s;border-radius:2px}
#pallet-editor{position:absolute;bottom:0;left:300px;right:205px;background:rgba(8,8,22,.96);border-top:1px solid #1e2040;padding:8px 14px;z-index:20;display:none}
#pallet-editor.show{display:block}
.editor-top{display:flex;align-items:center;gap:10px;margin-bottom:7px;flex-wrap:wrap}
.editor-top .ptitle{margin:0;border:none;padding:0;white-space:nowrap}
#layer-tabs{display:flex;gap:4px;flex-wrap:wrap;flex:1}
.ltab{padding:3px 10px;font-size:11px;border-radius:3px;cursor:pointer;border:1px solid #2a2a50;background:#111128;color:#888;transition:all .15s}
.ltab.active{background:#0d47a1;color:#fff;border-color:#1565c0}
.ltab:hover:not(.active){background:#1e2040;color:#ddd}
.editor-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.editor-row label{font-size:11px;color:#888}
.editor-row select{background:#111128;border:1px solid #2a2a50;color:#ddd;padding:3px 6px;border-radius:3px;font-size:11px;cursor:pointer}
.jrow{display:flex;flex-direction:column;gap:1px;margin-bottom:4px}
.jhdr{display:flex;justify-content:space-between;font-size:10px}
.jname{color:#82b1ff}.jval{color:#40c4ff;font-variant-numeric:tabular-nums}
.jrow input[type=range]{width:100%;height:3px;cursor:pointer;accent-color:#40c4ff}
.legend{display:flex;gap:8px;flex-wrap:wrap}
.li{display:flex;align-items:center;gap:4px;font-size:10px}
.ld{width:11px;height:11px;border-radius:2px;flex-shrink:0}
#glb-info{font-size:10px;color:#555;margin-top:3px;line-height:1.5}
#tip{position:absolute;background:rgba(8,8,20,.95);border:1px solid #2a2a50;border-radius:5px;padding:5px 9px;font-size:10px;line-height:1.6;pointer-events:none;z-index:50;display:none;color:#ddd;white-space:nowrap}
/* Jog Panel */
#jog-panel{position:absolute;bottom:10px;right:215px;width:280px;background:rgba(8,8,20,.96);border:1px solid #1e2040;border-radius:6px;padding:10px;z-index:25;display:none}
#jog-panel.show{display:block}
.jog-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.jog-title .ptitle{margin:0;border:none;padding:0}
.jog-close{background:none;border:none;color:#ff5252;cursor:pointer;font-size:14px}
.jog-row{display:flex;align-items:center;gap:4px;margin-bottom:4px}
.jog-row .jlbl{font-size:11px;color:#82b1ff;width:28px;font-weight:600;text-align:center}
.jog-row .jcur{font-size:10px;color:#40c4ff;width:70px;text-align:center;font-variant-numeric:tabular-nums}
.jog-btn-m,.jog-btn-p{width:34px;height:26px;border:1px solid #2a2a50;border-radius:3px;cursor:pointer;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}
.jog-btn-m{background:#2a1a1a;color:#ff5252}.jog-btn-m:hover{background:#3a1a1a}
.jog-btn-p{background:#1a2a1a;color:#69f0ae}.jog-btn-p:hover{background:#1e3a1e}
.jog-step{display:flex;align-items:center;gap:6px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #1e2040}
.jog-step label{font-size:10px;color:#888}
.jog-step input{width:55px;background:#111128;border:1px solid #2a2a50;color:#ddd;padding:2px 5px;border-radius:3px;font-size:11px}
/* 2D Editor Modal */
#editor2d-modal{position:absolute;inset:0;background:rgba(4,4,12,.98);z-index:200;display:none;flex-direction:column}
#editor2d-modal.show{display:flex}
#e2d-toolbar{min-height:40px;background:rgba(8,8,20,.95);border-bottom:1px solid #1e2040;display:flex;align-items:center;flex-wrap:wrap;padding:6px 14px;gap:8px;flex-shrink:0}
#e2d-toolbar .ptitle{margin:0;border:none;padding:0}
#e2d-toolbar select,#e2d-toolbar input{background:#111128;border:1px solid #2a2a50;color:#ddd;padding:3px 6px;border-radius:3px;font-size:11px}
#e2d-body{flex:1;display:flex;overflow:hidden}
#e2d-canvas{flex:1;background:#0a0a14;cursor:default}
#e2d-sidebar{width:230px;background:rgba(8,8,20,.95);border-left:1px solid #1e2040;padding:10px;overflow-y:auto;flex-shrink:0}
.e2d-library{padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #1e2040}
.e2d-library input,.e2d-library select{width:100%;background:#111128;border:1px solid #2a2a50;color:#ddd;padding:5px 6px;border-radius:3px;font-size:10px;margin-bottom:5px}
.e2d-library-actions{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.e2d-library-actions .btn{margin:0;padding:5px 4px}
.e2d-box-item{font-size:10px;padding:4px 6px;margin-bottom:2px;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;border:1px solid transparent}
.e2d-box-item:hover{background:#1e2040}
.e2d-box-item.selected{border-color:#ffff00;background:#1a1a10}
.e2d-box-item.collision{border-color:#ff5252;background:#2a1010}
#e2d-collision-msg{position:absolute;top:50px;left:50%;transform:translateX(-50%);background:rgba(213,0,0,.9);color:#fff;padding:6px 16px;border-radius:4px;font-size:12px;font-weight:600;z-index:210;display:none;pointer-events:none}
#e2d-info{position:absolute;bottom:10px;left:50%;transform:translateX(-50%);background:rgba(8,8,20,.9);border:1px solid #1e2040;padding:4px 12px;border-radius:4px;font-size:10px;color:#888;z-index:210;pointer-events:none}
