.icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1em;
  height: 1em;
  flex-shrink: 0;
  vertical-align: middle;
}

.icon-sm { width: 16px; height: 16px; }
.icon-md { width: 20px; height: 20px; }
.icon-lg { width: 24px; height: 24px; }
.icon-xl { width: 32px; height: 32px; }

.icon-svg {
  fill: currentColor;
  stroke: currentColor;
  stroke-width: 0;
}

.icon-stroke {
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.icon-primary { color: var(--color-primary); }
.icon-success { color: var(--color-success); }
.icon-warning { color: var(--color-warning); }
.icon-danger { color: var(--color-danger); }
.icon-info { color: var(--color-info); }
.icon-secondary { color: var(--color-text-secondary); }

@keyframes icon-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.icon-spin { animation: icon-spin 1s linear infinite; }
