.CanvasContainer { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 0; } .LoadingIndicator { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; gap: 16px; pointer-events: none; z-index: 1; opacity: 0.8; } .LoadingIndicator[data-complete="true"] { animation: loadingComplete 0.3s ease-out forwards; } .Spinner { width: 48px; height: 48px; border: 4px solid rgba(255, 255, 255, 0.2); border-top-color: white; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes loadingComplete { 0% { opacity: 1; } 100% { opacity: 0; } } .Sidebar { position: fixed; top: 0; left: 0; bottom: 0; width: 260px; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(8px); color: #fff; font-size: 13px; z-index: 2; display: flex; flex-direction: column; overflow: hidden; } .SidebarSection { padding: 10px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .SidebarSection:last-child { border-bottom: none; } .SectionLabel { font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em; color: rgba(255, 255, 255, 0.4); margin-bottom: 6px; } .AnimationList { flex: 1; overflow-y: auto; padding: 0 12px 12px; } .AnimationItem { display: flex; align-items: center; gap: 6px; padding: 4px 6px; border-radius: 4px; cursor: pointer; user-select: none; } .AnimationItem:hover { background: rgba(255, 255, 255, 0.08); } .AnimationItem[data-active="true"] { background: rgba(255, 255, 255, 0.15); } .PlayButton { flex-shrink: 0; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; border: none; border-radius: 4px; background: rgba(255, 255, 255, 0.1); color: rgba(255, 255, 255, 0.6); cursor: pointer; font-size: 11px; padding: 0; } .PlayButton:hover { background: rgba(255, 255, 255, 0.2); color: #fff; } .AnimationItem[data-active="true"] .PlayButton { background: rgba(100, 180, 255, 0.3); color: #fff; } .AnimationName { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .ClipName { flex-shrink: 0; font-size: 10px; color: rgba(255, 255, 255, 0.3); white-space: nowrap; } .CyclicIcon { flex-shrink: 0; font-size: 13px; color: rgba(255, 255, 255, 0.3); title: "Cyclic (looping)"; } .CheckboxField { display: flex; align-items: center; gap: 6px; }