.text-ellipsis { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .layers-panel-inner { display: flex; flex-direction: column; user-select: none; z-index: 6; overflow-y: auto; width: 100%; -webkit-overflow-scrolling: touch; } .layers-header { display: flex; justify-content: space-between; align-items: center; padding: 1.5rem; border-bottom: 1px solid #e0e0e0; } .layers-header h3 { margin: 0; font-size: 1.6rem; font-weight: 500; color: #333; } .layer-actions-group { display: flex; gap: 0.8rem; } .layer-actions-group .normal-actions, .layer-actions-group .multi-select-actions { display: flex; gap: 0.8rem; } .action-btn { width: 3.2rem; height: 3.2rem; background: none; border: 1px solid #d9d9d9; border-radius: 0.4rem; display: flex; align-items: center; justify-content: center; color: #666; cursor: pointer; transition: all 0.2s ease; } .action-btn:hover { background-color: #f0f0f0; border-color: #40a9ff; color: #40a9ff; } .action-btn:active { background-color: #e6f7ff; border-color: #1890ff; color: #1890ff; } .action-btn[disabled] { opacity: 0.5; cursor: not-allowed; background-color: #F9FAFA; color: #bfbfbf; border-color: #e6e6e6; } .action-btn[disabled]:hover { background-color: #F9FAFA; color: #bfbfbf; border-color: #e6e6e6; } .group-btn { background-color: #e6f7ff; border-color: #91d5ff; color: #1890ff; } .group-btn:hover { background-color: #bae7ff; border-color: #69c0ff; } .group-btn.disabled { background-color: #f0f5ff; border-color: #d9ecff; color: #bfbfbf; } .ungroup-btn { background-color: #fff2e8; border-color: #ffbb96; color: #fa8c16; } .ungroup-btn:hover { background-color: #ffd8bf; border-color: #ff9c6e; color: #fa8c16; } .ungroup-btn.disabled { background-color: #f0f5ff; border-color: #d9ecff; color: #bfbfbf; } .delete-selected-btn { background-color: #fff2f0; border-color: #ffccc7; color: #ff4d4f; } .delete-selected-btn:hover { background-color: #ffebe6; border-color: #ff7875; color: #ff4d4f; } .clear-selection-btn { background-color: #f6f6f6; border-color: #d9d9d9; color: #595959; } .clear-selection-btn:hover { background-color: #e6e6e6; border-color: #bfbfbf; color: #595959; } .multi-select-info { padding: 1rem 0.6rem; background-color: rgba(238, 238, 238, 0.4); border-bottom: 1px solid #91d5ff; color: #333; font-size: 1.3rem; line-height: 1.4; } .multi-select-info small { display: block; margin-top: 0.4rem; color: #666; font-size: 1.1rem; } .layers-list { position: relative; flex: 1; overflow-y: auto; } .layer-item { position: relative; width: 100%; display: flex; flex-direction: column; padding: 1rem 0; cursor: pointer; transition: all 0.2s ease; border: 1px solid transparent; border-left: 0; border-right: 0; border: none; border-bottom: 1px solid #f5f2f2; padding-left: 3rem; padding-right: 1rem; color: #333; } .layer-item.group-layer { background-color: rgba(240, 248, 255, 0.3); border-color: #e6f7ff; } .layer-item:hover { background-color: #f0f0f0; border-color: #e0e0e0; } .layer-item.active { background-color: #e6f7ff; border-color: #91d5ff; } .layer-item.selected { background-color: #bae7ff; border-color: #91d5ff; } .layer-item.editing { background-color: #fff7e6; border-color: #ffd666; } .layer-item.disabled { opacity: 0.6; cursor: not-allowed; } .layer-item.disabled:hover { background-color: transparent; } .layer-header { display: flex; align-items: center; width: 100%; gap: 0.6rem; } .layer-review { width: 3.2rem; height: 3.2rem; display: flex; align-items: center; justify-content: center; overflow: hidden; flex: none; background: repeating-conic-gradient(#F9FAFA 0% 25%, #ffffff 0% 50%) 50% / 1rem 1rem; border: 1px solid #e0e0e0; } .layer-thumbnail { width: 100%; height: 100%; object-fit: contain; } .layer-type-icon { font-size: 1.4rem; } .visibility-btn { width: 2.2rem; height: 2.2rem; cursor: pointer; flex: none; color: #333; display: flex; align-items: center; justify-content: center; } .visibility-btn.hidden { color: #999; } .layer-name-container { flex: 1; margin: 0 0.6rem; overflow: hidden; } .layer-name-container .layer-name-wrapper { width: 100%; display: flex; align-items: center; justify-content: space-between; } .layer-name { color: #333; font-size: 1.4rem; text-align: left; display: block; width: 100%; } .layer-name-input { width: 100%; padding: 0.2rem 0.4rem; border: 1px solid #1890ff; border-radius: 0.3rem; font-size: 1.4rem; color: #333; background-color: #fff; outline: none; box-sizing: border-box; } .layer-name-input:focus { border-color: #40a9ff; box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); } .layer-status { display: flex; align-items: center; gap: 0.4rem; } .status-icon { font-size: 1.2rem; } .status-icon.locked { color: #1890ff; } .status-icon.group { color: #fa8c16; } .status-icon.disabled { color: #ccc; cursor: not-allowed; } .layer-color-btn { width: 30px; height: 20px; margin-right: 5px; border-radius: 2px; border: 1px solid #000; } .layer-actions { display: flex; gap: 0.6rem; } .delete-btn { font-size: 1.6rem; cursor: pointer; width: 2.2rem; height: 2.2rem; display: flex; align-items: center; justify-content: center; } .delete-btn:hover { color: #ff4d4f; } .delete-btn.disabled { color: #ccc; cursor: not-allowed; } .layer-drag-handle { position: absolute; top: 0; left: 0; width: 2rem; height: 100%; cursor: move; flex: none; display: flex; align-items: center; justify-content: center; color: #999; margin-right: 0.4rem; background: #eee; box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); } .layer-drag-handle:hover { color: #333; } .layer-checkbox { width: 1.8rem; height: 1.8rem; margin-right: 0; cursor: pointer; flex: none; display: flex; align-items: center; } .child-layer { padding: 0.8rem 2rem 0.8rem 3.2rem; background-color: rgba(240, 240, 240, 0.3); border-left: 2px solid #e0e0e0; } .child-layer:hover { background-color: rgba(224, 224, 224, 0.5); } .child-layer.active { background-color: rgba(230, 247, 255, 0.5); border-left: 2px solid #1890ff; } .child-layer.editing { background-color: rgba(255, 247, 230, 0.5); border-left: 2px solid #ffd666; } .child-layer .layer-actions { position: static; display: flex; gap: 0.4rem; } .child-layer .layer-actions button { width: 2rem; height: 2rem; border: none; background: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: #999; border-radius: 2px; transition: all 0.2s; } .child-layer .layer-actions button:hover { background-color: #f0f0f0; color: #333; } .layer-indent { width: 2rem; flex: none; } .layer-info { flex: 1; margin: 0 0.8rem; } .layer-info .layer-name { font-size: 1.3rem; color: #333; margin-bottom: 0.2rem; } .layer-info .layer-status { display: flex; align-items: center; gap: 0.4rem; } .layer-info .layer-type { font-size: 11px; color: #999; } .child-drag-handle { width: 1.6rem; height: 1.6rem; cursor: move; flex: none; display: flex; align-items: center; justify-content: center; color: #999; margin-right: 0.4rem; } .child-drag-handle:hover { color: #333; } .fixed-layers { border-top: 1px solid #e0e0e0; background-color: rgba(238, 238, 238, 0.4); } .fixed-layers .layer-drag-handle { cursor: default; } .fixed-layer { background-color: #fafafa; } .fixed-layer-indicator { width: 2rem; height: 2rem; display: flex; align-items: center; justify-content: center; color: #1890ff; margin-right: 0.4rem; } .background-indicator, .fixed-indicator { display: flex; align-items: center; justify-content: center; margin-left: 0.4rem; } .background-icon, .fixed-icon { font-size: 1.4rem; color: #999; } .sortable-layers { width: 100%; } .ghost { opacity: 0.5; background-color: #f0f0f0; border: 2px dashed #1890ff; } .chosen { background-color: #e6f7ff; border: 1px solid #1890ff; } .drag { opacity: 0.8; transform: rotate(5deg); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); } .child-layers .ghost { opacity: 0.4; background-color: #fff7e6; border: 1px dashed #faad14; } .child-layers .chosen { background-color: #fff7e6; border: 1px solid #faad14; } .child-layers .drag { opacity: 0.7; transform: rotate(3deg); box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); } @media (max-width: 768px) { .layer-item { padding: 1.2rem; padding-left: 3.5rem; } .layer-header { min-height: 4rem; } .layer-drag-handle, .visibility-btn { width: 2.4rem; } .layer-review { width: 3.6rem; height: 3.6rem; } .action-btn { width: 3.6rem; height: 3.6rem; } .multi-select-info small { font-size: 1.1rem; } } @media (min-width: 768px) and (max-width: 1024px) { .layer-item { padding: 10px; padding-left: 30px; } .layer-drag-handle:hover, .visibility-btn:hover { background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; } } @media (hover: none) and (pointer: coarse) { .layer-item { padding-left: 30px; } .layer-item:hover { background-color: transparent; } .layer-item:active { background-color: #f0f0f0; } .action-btn:hover { background-color: transparent; border-color: #d9d9d9; color: #666; } .action-btn:active { background-color: #e6f7ff; border-color: #1890ff; color: #1890ff; } } .group-expand-icon { display: flex; align-items: center; justify-content: center; width: 16px; height: 16px; cursor: pointer; border-radius: 2px; transition: all 0.2s ease; margin-right: 4px; color: #333; } .group-expand-icon .svg-icon { transition: transform 0.2s ease; } .group-layer .layer-type-icon { font-size: 14px; } .child-layers { position: relative; } .child-layers::before { content: ''; position: absolute; left: 8px; top: 0; bottom: 0; width: 1px; background-color: #e0e0e0; } .layer-indent { width: 16px; position: relative; } .layer-indent::after { content: ''; position: absolute; left: 8px; top: 50%; width: 8px; height: 1px; background-color: #e0e0e0; } .child-layers-expand-enter-active, .child-layers-expand-leave-active { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } .child-layers-expand-enter-from { height: 0; opacity: 0; padding-top: 0; padding-bottom: 0; margin-top: 0; margin-bottom: 0; } .child-layers-expand-leave-to { height: 0; opacity: 0; padding-top: 0; padding-bottom: 0; margin-top: 0; margin-bottom: 0; } .group-expand-icon { display: flex; align-items: center; justify-content: center; width: 16px; height: 16px; cursor: pointer; border-radius: 2px; transition: all 0.2s ease; margin-right: 4px; } .group-expand-icon:hover { background-color: rgba(0, 0, 0, 0.1); transform: scale(1.1); } .group-expand-icon:active { transform: scale(0.95); } .group-expand-icon .svg-icon { transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .child-layers { position: relative; background: linear-gradient(135deg, rgba(240, 248, 255, 0.1) 0%, rgba(240, 248, 255, 0.05) 100%); } .child-layers::before { content: ''; position: absolute; left: 8px; top: 0; bottom: 0; width: 1px; background: linear-gradient(to bottom, #e0e0e0 0%, rgba(224, 224, 224, 0.3) 100%); } .child-layers .layer-item { animation: slideInRight 0.2s ease-out; animation-fill-mode: both; } .child-layers .layer-item:nth-child(1) { animation-delay: 0.05s; } .child-layers .layer-item:nth-child(2) { animation-delay: 0.1s; } .child-layers .layer-item:nth-child(3) { animation-delay: 0.15s; } .child-layers .layer-item:nth-child(4) { animation-delay: 0.2s; } .child-layers .layer-item:nth-child(5) { animation-delay: 0.25s; } @keyframes slideInRight { from { opacity: 0; transform: translateX(-10px); } to { opacity: 1; transform: translateX(0); } } @media (hover: none) and (pointer: coarse) { .child-layers-expand-enter-active, .child-layers-expand-leave-active { transition: all 0.25s ease; } .group-expand-icon:hover { transform: none; background-color: transparent; } .group-expand-icon:active { transform: scale(0.9); background-color: rgba(0, 0, 0, 0.1); } .child-layers .layer-item { animation-duration: 0.15s; } }