/* Toast */
@keyframes slide-in  { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
@keyframes slide-out { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } }
.animate-slide-in  { animation: slide-in 0.25s ease-out; }
.animate-slide-out { animation: slide-out 0.15s ease-in; }

/* 滚动条 */
::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.08); border-radius: 2px; }
::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.15); }

/* 文件树 */
.tree-row { user-select: none; }
.dir-children { overflow: hidden; max-height: 0; transition: max-height 0.15s ease-out; }
.dir-children:not(.hidden) { max-height: 9999px; }

/* Checkbox */
.file-checkbox {
  appearance: none; -webkit-appearance: none;
  width: 14px; height: 14px;
  border: 1.5px solid rgba(255,255,255,0.2);
  border-radius: 3px;
  background: transparent;
  cursor: pointer;
  flex-shrink: 0;
  transition: all 0.15s;
}
.file-checkbox:hover { border-color: rgba(96,165,250,0.6); }
.file-checkbox:checked { background: #3b82f6; border-color: #3b82f6; }
.file-checkbox:checked::after {
  content: '';
  position: absolute;
  left: 3.5px; top: 1px;
  width: 4px; height: 8px;
  border: solid white;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

::selection { background: rgba(59,130,246,0.25); }
