* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Arial, sans-serif; background: #1a1a2e; color: #e0e0e0; overflow: hidden; height: 100vh; } #app { display: flex; height: 100vh; } /* --- Toolbar / Palette --- */ #toolbar { width: 220px; min-width: 220px; background: #16213e; border-right: 2px solid #0f3460; padding: 10px; overflow-y: auto; display: flex; flex-direction: column; } #toolbar h2 { font-size: 14px; color: #e94560; margin: 10px 0 6px 0; text-transform: uppercase; letter-spacing: 1px; } .setting { margin-bottom: 8px; } .setting label { display: block; font-size: 12px; margin-bottom: 3px; color: #aaa; } .setting input[type="number"] { width: 100%; padding: 4px 6px; background: #0f3460; border: 1px solid #1a1a5e; color: #e0e0e0; border-radius: 3px; font-size: 13px; } .setting input[type="checkbox"] { margin-right: 5px; } .setting button { width: 100%; padding: 6px; margin-bottom: 4px; background: #0f3460; border: 1px solid #1a1a5e; color: #e0e0e0; border-radius: 3px; cursor: pointer; font-size: 12px; } .setting button:hover { background: #e94560; } /* --- Palette symbols --- */ #palette { flex: 1; overflow-y: auto; } .palette-item { display: flex; align-items: center; gap: 8px; padding: 6px 4px; margin-bottom: 4px; background: #0f3460; border: 1px solid #1a1a5e; border-radius: 4px; cursor: grab; user-select: none; transition: background 0.15s; } .palette-item:hover { background: #1a1a5e; border-color: #e94560; } .palette-item:active { cursor: grabbing; } .palette-item img { width: 40px; height: 30px; object-fit: contain; background: #222; border-radius: 3px; padding: 2px; } .palette-item span { font-size: 11px; color: #ccc; } /* --- Canvas area --- */ #canvas-wrapper { flex: 1; overflow: hidden; background: #111; position: relative; } #canvas { width: 1920px; height: 1080px; position: absolute; background: #1e1e1e; border: 1px solid #333; transform-origin: 0 0; } #pdf-background { position: absolute; top: 0; left: 0; overflow: hidden; width: 1920px; height: 1080px; pointer-events: none; z-index: 0; } #pdf-background canvas { position: absolute; transform-origin: 0 0; opacity: 0.35; } #pdf-background.editing canvas { opacity: 0.6; cursor: move; } /* Edit background active indicator */ .edit-bg-active { background: #e94560 !important; color: #fff !important; } #grid-overlay { position: absolute; top: 0; left: 0; width: 1920px; height: 1080px; pointer-events: none; z-index: 1; } #drop-zone { position: absolute; top: 0; left: 0; width: 1920px; height: 1080px; z-index: 2; } /* --- Placed symbols on canvas --- */ .placed-symbol { position: absolute; cursor: move; user-select: none; border: 1px solid transparent; transition: border-color 0.1s; resize: none; } .placed-symbol:hover { border-color: #e94560; } .placed-symbol.selected { border-color: #00ff88; box-shadow: 0 0 6px rgba(0, 255, 136, 0.4); } .placed-symbol.dragging { opacity: 0.7; z-index: 1000; } .placed-symbol.collision { border-color: #ff0000; box-shadow: 0 0 8px rgba(255, 0, 0, 0.6); } .placed-symbol img { width: 100%; height: 100%; pointer-events: none; display: block; } /* --- Drag ghost --- */ .drag-ghost { position: fixed; pointer-events: none; opacity: 0.6; z-index: 9999; } /* --- Context menu --- */ .context-menu { position: fixed; background: #16213e; border: 1px solid #0f3460; border-radius: 4px; padding: 4px 0; z-index: 10000; min-width: 140px; } .context-menu-item { padding: 6px 14px; font-size: 12px; color: #e0e0e0; cursor: pointer; } .context-menu-item:hover { background: #e94560; } /* --- Resize handle (conveyor width) --- */ .resize-handle { position: absolute; top: 50%; right: -5px; width: 10px; height: 10px; transform: translateY(-50%); background: #00ff88; border: 1px solid #009955; border-radius: 2px; cursor: ew-resize; z-index: 10; }